您可能已经在他的博客如何存储数万亿条同的数据消息或峰会演讲中体验到了 的专业知识和引人入胜的沟通风格如何将数万亿条消息从 迁移到 因此您失去了意外停机的教训中体验到了这一点。如果没有,您应该
您可以从 购买整本 370 页的书。您还可以免费获取 122 页的早期发行数字副本,由 提供。本书摘录包含一个折扣代码,可享受同的数据全书 45% 的折扣。
免费获取 122 页的 PDF
以同的数据下是第 1 章的摘录;经出版商许可在此转载。
ScyllaDB 是一个数据库 — 其名称就说明了这一点!用户向其提供数据;数据库在被要求时返回数据。这个非常基础且过于简单的界面与 PostgreSQL 和 MySQL 等流行的关系数据库并无太大区别。然而,ScyllaDB 并不是一个关系数据库,它避开了连接和关系数据建模,以提供不同的优势。为了说明这些,让我们看一个虚构的例子。
假设数同的数据据库
假设你刚搬到一个新城镇,当你去新餐馆时,你想记住你吃过什么,以便下次点这道菜或不点这道菜。你可以把它写在日记里或保存在手机的笔记应用中,但你听说了一种新的商业模式,人们可以记住你发给他们的信息。你的朋友罗伯特刚刚创办了一家类似的公司:罗伯特的记忆。
罗伯特的回忆
Robert 的业务(图)很简单同的数据:你可以发短信给他的电话号码,他会记同的数据住你发给他的任何信息。他还会为你检索信息,这样你就不需要记住你在新城镇吃过的所有东西。这就是 Robert 的工作。
图 罗伯特的回忆有一个看似简单的计划
该计划一开始进展顺利,但问题开始 贷款数据库 出现。有一次,你给他发短信,他没有回复。他后来道歉说他有医生预约。这并非不合理,你希望你的朋友身体健康。还有一次,你给他发短信说要吃一顿新餐,他花了几分钟才回复,而不是同的数据像往常那样立即回复。他说生意兴隆,他收到了大量请求——回复时间受到影响。他向你保证,不用担心,他有计划。
图 罗伯特在他的系统中添加了一个朋友来解决问题,但是这带来了复杂性
罗伯特雇了一个朋友来帮他。他向你发送了系统的最新更新规则。如果你同的数据只想问一个问题,你可以给他的朋友罗莎发短信。所有更新仍然发送给罗伯特;他会将你保存的所有内容发送给她,这样她就会有一份最新的副本。一开始,你犯了几次错误,仍然向罗伯特提问,但似乎效果不错。罗伯特不再不知所措,罗莎的回复也很迅速。
有一天,你意识到当你问 Rosa 一个问 您需要了解的有关业务成本的一切 题时,她回复了一条你之前覆盖的旧评论。你向 Robert 发消息,说明这一差异,担心你对 Main Street Tacos 改进很多的玉米饼的评论会永远丢失。Robert 告诉你,系统内部出现了一个问题,Rosa 收不到 Robert 的消息,但仍然可以收到客户的请求。你的请求并没有丢失,他们正在协调以重新同步。
您希同的数据望能够回答一个问题:这里的食物好吃吗?现在,您担心的是联系多个人,这取决于您是在阅读评论还是撰写评论,数据是否同步,以及您朋友的系统是否可以扩展以满足所有用户的请求。如果罗伯特无法处理人们只保存他们的信息,会发生什么?当您开始集思广益寻找静脉注射能量饮料解决方案时,您意识到是时候考虑其他选择了。
ABC 数据:一种不同的方法
您的研究将您引向了另一家公司 — ABC Data。他 cl 列表 们告诉您,他们的系统略同的数据有不同:他们有三个人 — Alice、Bob 和 Charlotte — 其中任何人都可以保存信息或回答问题。他们相互通信以确保每个人都拥有最新的数据,如图 所示。您很好奇如果其中一个人不在会发生什么,他们说他们提供了一个很酷的功能:因为他们有多个,所以他们会相互协调以提供数据冗余并提高可用性。如果 Charlotte 不在,Alice 和 Bob 将收到请求和答复。如果 Charlotte 稍后回来,Alice 和 Bob 将让 Charlotte 了解最新的变化。
图 ABC Data 的方法旨在应对罗伯特遇到的扩展挑战。
这种设置令人印象深刻,但由于每个请求都可能导致更多请求,你担心这个系统可能比罗伯特的系统更容易不堪重负。他们告诉你,这就是他们系统的美妙之处。他们获取数据集并创建多个副本。然后,他们将这些冗余数据分配给他们自己。如果他们需要扩展,他们只需要增加其他人,接管一些现有的数据片段。当假设的第四个人 Diego 加入时,一个客户的数据可能由 Alice、Charlotte 和 Diego 拥有,而 Bob、Charlotte 和 Diego 可能拥有其他数据。
由于它们允许您同的数据选择内部有多少人应对成功的请求做出响应,因此 ABC Data 让您同的数据可以控制可用性和正确性。如果您希望始终拥有最新的数据,您可以要求所有三个持有者都做出响应。如果您想优先获得答案,即使它不是最新的答案,您也可以只要求一个持有者做出响应。您可以通过要求两个持有者做出响应来平衡这些属性 — 您可以容忍失去一个持有者,但您可以确保他们中的大多数人都看到了最新的数据,因此您应该获得最新的信息。
图 ABC Data 的方法使我们能够控制可用性和正确性
您已经了解了两个假想数据库 — 一个看似简单,但随着请求的增长而引入了复杂性,另一个则具有更复杂的实现,试图处理第一个系统的缺点。在开始考虑告诉朋友您要离开他的公司而去竞争对手的尴尬之前,让我们回到现实,将这些假设的数据库转化为现实世界。
真实世界的数据库
Robert 的数据库是一个隐喻性的关系同的数据数据库,例如 PostgreSQL 或 MySQL。它们运行起来相对简单,适合多种用例,性能相当高,而且它们的关系数据模型已经在实践中使用了 50 多年。通常,关系数据库是一种安全而强大的选择。因此,开发人员倾向于默认使用这些系统。但是,正如所展示的,它们也有缺点。可用性通常是全有或全无。即使您同的数据使用只读副本运行(在 Robert 的数据库中是他的朋友 Rosa),如果您丢失了主实例,您也只能执行读取操作。可扩展性也同的数据可能很棘手 – 服务器具有最大数量的计算资源和内存。一旦达到这个上限,您就没有增同的数据长空间了。正是通过这些缺点,ScyllaDB 脱颖而出。
ABC Data 系统是 ScyllaDB。与 ABC Data 一样,ScyllaDB 是一个分同的数据布式数据库,它在其节点之间复制数据,以提供可扩展性和容错能力。扩展很简单 – 您可以添加更多节点。节点数量的这种弹性扩展到查询。ScyllaDB 允许您决定需要多少个副本才能响应成功的查询,从而为您的应用程序提供处理服务器丢失的空间。