数据库:为什么我们选择什么?
#生产率 #database #体系结构 #engineering

我们都知道,就项目而言,数据库是其至关重要的部分,但其活力取决于我们在整个开发周期中做出的决策。数据库将我们的生活与“关系”和“等级”模型等含义融为一与我们选择和方法相关的决定。

传统的DBM,NOSQL,NewsQL,我们不缺少它们,但是我们确实缺乏解决方案并使一个问题弄错了,此后遇到网络或查询性能问题,而无需说明明显的业务需求。您可以通过拥有DBA来解决所有这些问题,但它们不是银弹。他们可以在DB上解决您的项目问题,但尽可能。

因此,“如何为项目需求选择和设计数据库,而不是坚持下去?”首先应该关心我们。不断地,通往它的道路不应该像第一次一样艰难。这就是为什么这篇文章会尝试解释(不给您的正确途径),您如何由于数据库问题构建模式。

我们可以遇到什么问题?

在“问题”的手段中,可以确定三个主要因素:技术,人类,经济。

技术

在这里,您的项目目前的开发阶段可能会困扰:相反,它是MVP或POC,甚至准备就绪。尽管POC建议操纵和缺乏数据确定性,但MVP已经在第一次迭代期间选择了数据库的真实数据,但另一方面,MVP可能会有经济性不确定性,从而导致未来的技术债务。

与此同时,准备生产的项目拥有我们所需的一切:数据库,数据,代码,集成 - OPS文化要变得更好,但是,在数据库或其副本集跨多个服务器中遇到严重问题或其副本集。 /p>

人类

使用技术,项目关键部分之一是人为因素。由于最终产品微妙而引起的数据误解或客户和团队之间的误解会导致技术债务或生产环境中的绩效问题,因此使团队互相不信任。

除了上述内容外,还应提到混乱的管理过程和当前的项目不良工程文化可以加速数据库问题。

经济

偶尔,大多数经济不是该项目的强大方面。有时,客户不了解提供理想的数据将花费多少;团队不知道他们将在数据库群集上花费多少。在少数情况下,团队或管理层无法决定使用自己的DBA支持数据库群集或在对方购买支持是更好,更便宜的。

好的,但是例子呢?

然而,到目前为止,还没有显示任何例子。让我们从我们的角度回答问题:

  • 您上次您最后一次就项目的技术方面发出问题?

  • 您最后一次就涉及数据库的问题进行争论?

  • 您的计算是否正确地对数据库维护进行?

如果您在上面回答了所有这些问题,则可以跳过本章。如果没有, - 让我们看看示例,尽管您应该了解所有以下情况可能永远不会发生。

示例1

一个团队对当前数据库的性能不满意,也希望将其增加30-40%,但他们发现不仅速度是他们的担忧之一,而且还与稳定性有关。问题是:“我们如何提高绩效,以确保我们的疑问中有99.99%达到我们的SLA目标?”。由于他们绝望地搜索下一个结论是:碎片,升级或桌子。

即使这样,所有结论都令人担忧。如果他们选择碎片,则可能会有网络或读/写问题;如果升级,团队可能会遇到财务风险或降级。最终结论 - 表本身或数据库 - 他们所缺乏的时间腰部。

示例2
认识玛琳和耶文。 Marlene是数据库专家,而Yevhen是开发人员。尽管他们与众不同,但他们在一个团队中工作。他们的队友知道,当涉及到数据库时,玛琳和Yevhen偶尔会质疑。这次不是排除。

Marlene担心Yevhen的任务解决方案可能会在将来带来麻烦,并可能意外地将数据库带到OOM和数据库之类的错误。 Yevhen一直说相反,并试图向团队保证,他的解决方案可以解决客户的麻烦。

研发如何解决?

尽管我们想满足我们的需求和客户,我们也应该了解工程文化的重要性,或者是创新部分,这很可能被认为是公司生存的因素之一。确实,它也可能成为负担。但这不是重点。

现在,让我们看看R&D如何帮助我们通过数据库带来更高的透明度。我们可以将研究和开发周期分为四个步骤:通过进一步的测试实施,实施解决方案并改善理论,探索,设计和开发。

Wikipedia Image

让我们寻求如何将其扩展到下面的数据库问题。

理论(和合成)

在理论上,我们应该提供有关研究对象和探索方向的信息。显然,我们应该在这里与已知的SRE术语一起形成研究对象:SLA,SLO,SLI。虽然,我们应该以两种观点(客户和团队的观点)记住权衡取舍。尽管客户定义了他需要在最后阶段看到的信息,但工程团队应征收责任,以支持客户对需求的需求(从技术方面到经济)。

回顾我们的示例,我们可以在示例1 中看到该团队主要做出了一些假设(碎片,硬件升级和数据库架构重构),而Marlene和Yevhen由于指标和指标和Yevhen而存在分歧与客户达成协议(Marlene确定Yevhen的决定将影响SLA; Yevhen的意见与SLI有关)。

探索(假设和澄清)

我们正在尝试在这里实现我们所有的理论信念,批准或拒绝客户的需求。预期的结果是可行性研究以及试点研究。这些论文会回答诸如“我们得到想要的东西?在开发期间或实施客户需求之后是否有任何风险?”通常,这是我们第一次尝试实现和开发数据库和客户端数据的功能, - 它可以是数据库架构集成或为几乎现有群集添加更多功能。

可以识别非标准情况并与之尝试。据我们深入研究细节,我们将确保进一步的实施和设计过程绝对值得低成本。

在上面的示例中,示例1 的团队将进行实验,以解决测试环境中的所有难题,从跟踪查询并解释计划到数据库模式重构;对于示例2 Marlene和Yevhen缺乏沟通,将使用“配对编程”坐下并吸收他们的知识。

设计,开发和测试

除了技术技能以外,当今领域知识的必要性很重要。可以说,每个团队成员还应该知道,他可以随时更换他。如果您要向他解释功能实施的技术方面,客户不会抓住您说的话;他担心自己的业务需求,并期望您对通过向您提供的数据进行输出所看到的信息同样的理解。

在此步骤中,大部分研发人员都在这里。我们开发功能,并确保它将符合我们在建立理论时制作的SLA。在此,我们应该为文档和项目知识库做出贡献,以使未来的团队成员与我们或代替我们一起工作;质量保证应与开发相同,此外,质量保证将确保我们的数据库增强或数据符合业务需求。

团队没有期望这个问题是如此简单:造成了很多麻烦和一些优化的索引,因此导致了他们当前的问题。他们决定回滚一些事情,并进行了一项验尸研究,他们告诉其中,这不仅是数据库的问题,而且是对内部元素的错误知识。 Marlene和Yevhen提出了一个解决方案,可以满足他们的两种期望,除了团队的客户对输出和批准的修改感到兴奋。

实施和改进

结论是成功实施和数据输出。尽管如此,这些改进仍将进行,但并不尽可能快,而是适合我们和我们的客户的胖子。当然,这也是关于次要的错误,并且在我们的数据库更改后要发布的修复:从迁移到更改值类型(如果可能的话,)。

结论

如果构建系统,则应记住,这不仅是代码和性能很重要。通过采取研发方法,您可以改善当前团队的工程文化,并建立一个不会变成灾难的系统,但将受到控制并满足客户的需求。