我正在阅读有关 ArangoDB 的内容,它更有趣,但我在文档中找不到 ArangoDB 如何扩展的位置。ArangoDB 是否可扩展,是否可以使用 MongoDB 或 CouchDB 之类的分片?
2 回答
编辑
ArangoDB 从 2.0 版开始支持分片。
3.0 版将带来VelocyPack,它是一种二进制 JSON 表示,针对紧凑性、可解析性和可组合性进行了优化。它取代了形状概念/形状 JSON。
/编辑
我是 ArangoDB 的首席架构师。
monkegjinni 是对的,ArangoDB 不支持分片,但支持复制。为什么?
短版:
为相当复杂的数据模型(如图形和文档)提供支持会与分片的工作方式发生冲突。然而,随着现代 SSD 和计算机的效率,我们相信几乎所有项目都不再需要分片。今天的计算机可以轻松地将所有数据存储在单个节点上。这些项目需要的是 ArangoDB 支持的负载分配复制。
长版:
实际上有单独的缩放问题。
第一个问题是将请求分发到多个服务器以平衡请求负载。
ArangoDB 将通过写入的同步复制和读取请求的分发来支持这一点。
请注意,大多数数据库系统都遵循非常相似的路径,即它们支持通过有限的一致性保证分发请求,或者它们只允许在一个节点上写入并分发读取请求。他们有这个限制,因为分发写请求和支持完全一致性是不可能有效的。效率低下会抵消我们希望通过分发实现的收益。
第二个问题是将数据分布在多个服务器上以允许更大的数据集。
ArangoDB 不支持将数据分布在多个服务器上。
我们做出了这个决定,因为在多台服务器上分发数据总是要付出代价的。
这个价格可以非常明确。例如,数据模型可能非常有限。这是 Dynamo 或 RIAK 等键值存储所采用的路线。这里的数据模型和支持的查询非常简单,因此始终可以将查询定向到请求值所在的服务器(或少数服务器)。
请注意,我们确实相信这种方法对某些应用程序(例如 Amazons 数据库)有效。但我们认为,真正需要存储大量数据以致必须将其分布在大量服务器上并因此必须将访问模式限制为键值对的应用程序数量非常少。
或者可以隐藏价格。例如,如果数据是分布式的,并且数据库系统允许一般查询,就会出现这种情况。在这种情况下,查询必须分布在所有服务器上(因为您要查找的数据可能存在于任何服务器上)。这使得查询效率低下。
ArangoDB 的方法是将最多的东西挤到一台服务器上(好吧,ArangoDB 支持多台服务器 - 但要支持可用性)。为此,它使用两种主要策略。
一种策略是利用 SSD。请注意,SSD 的容量正以惊人的速度增长(您可以购买 TB 的 SSD,而购买第二台服务器的成本要少得多)。耐用性(可以写入 SSD 的数据总量)高达 PB(现在供应商终于获得了正确的磨损均衡算法)——因此 SSD 的可靠性不再是问题。并且这些 SSD 的性能非常好(比普通磁盘更接近主存)。
另一种策略是有效地存储数据。ArangoDB 使用形状来存储文档:形状是文档具有哪些属性和属性类型的信息 - 所有具有相同形状的文档共享此信息的表示。这意味着文档可以存储在比 JSON 或 BSON 表示所需的更少的空间中。
据我了解,它不允许分片(2.0 版之前),但允许复制。从链接
AvocadoDB 毫不费力地允许复制。我们喜欢“零管理原则”。使用 AvocadoDB 进行复制非常简单:插入 IP 地址即可!
以下复制类型适用于版本 2:
- 主主同步,
- 主主异步,
- 主从同步,
- 主从异步