在 ArangoDB 中,我们可以做地理分布式分片吗?

In ArangoDB, can we do geo distributed sharding

用例是我们在美国、欧盟和中国都有客户。根据立法,欧盟客户数据不应存储在欧盟境外,美国客户数据不应存储在中国。出于性能的考虑,数据尽量贴近客户,尽量replicated/redundant。所以计划将客户数据分成 3 个分片,customer_uscustomer_eucustomer_cn,并有 3 个数据中心,CaliforniaBeijingGeneva,这样:

现在整个例子都取自http://orientdb.com/docs/2.1/Distributed-Sharding.html,但是OrientDB有Class和Inheritance的概念。 AFAIK,ArangoDB 逐个碎片 key。我的问题是

  1. 我们能否使用 ArangoDB 分片进行相同的分片 key,我们如何配置分片和复制?
  2. 如果我们有关联数据,比如 "invoice",这样每张发票都必须属于一个且仅属于一个客户,我们是否可以自动以某种方式以相同的方式分配它们而无需处理分片 key?

ArangoDB 目前不提供数据中心感知或区域概念。 目前只有一个最终带有复制的断开连接的设置可能会让你部分达到你想要得到的点。

您将创建多个数据库,如 db_cn 等,并 replicate them 到不同的数据中心。 复制从站会给你一个只读副本。

我们可能会在 2016 年看到这个实现。由于这样的功能非常特殊(并且从另一个数据中心访问数据的延迟可能非常高),您的用例是什么?您想通过 arangodb.com 联系我们的黑客吗?

在 ArangoDB 中,您可以通过文档的哪些属性来控制对特定集合进行分片,不必总是 _key。如果你有两个集合,你可以让它们通过相同的分片属性来分片它们的文档。此外,您可以让两个集合拥有相同数量的分片并以相同的方式分配它们的分片(请参阅 _create 中的选项 "distributeShardsLike")。这样会导致相关文件的搭配。

不幸的是,在这个阶段,ArangoDB 无法控制分片在数据中心的分布方式。因此我们建议在每个大洲安装一个 ArangoDB 集群实例,并在应用程序代码中处理跨数据中心的正确数据复制。

还应该记住,在当前的 API 中,在出现故障的情况下,ArangoDB 可以在集群中的服务器之间自由移动分片,并且无法为这种移动配置限制。在未来,我们计划通过使 ArangoDB 具有机架和数据中心感知能力来解决这个问题,并允许更好地控制分片分布。那么上面的推荐就变了