我正在为在世界48个国家设有办事处的组织做一些工作。基本上,他们现在的工作方式是,他们都将数据存储在数据库的本地副本中,并将其复制到世界上所有地区/办事处。在奇怪的情况下,他们需要直接在“开发副本”在伦敦服务器上工作,他们必须直接连接到伦敦服务器,无论他们在世界的哪个位置。
因此,我想说我希望有一个跨越整个组织的单个图形,这个图形是分片的,这样每个区域都可以相对快速地读取图形。我担心写入会破坏性能。我知道写操作是通过一个主数据,这是否意味着全局只有一个主数据?即如果那位大师恰好在伦敦,那么无论本地分片如何,每次从悉尼写入数据库都必须遍历该距离?如果悉尼和伦敦被切断(无论出于何种原因)会怎样?
基本上,Neo4j如何解决全球分销问题?
答案 0 :(得分:7)
Neo4j企业版的分发机制确实是主从风格。对主站的任何写请求都在本地提交,并同步传输到push_factor
定义的从站号(默认值:1)。对从属设备的写入请求将同步将其应用于主设备,自身以及足够的计算机以实现push_factor
。同步的从站到主站通信可能会达到性能,这就是为什么建议将写入重定向到主站并通过从站分配读取的原因。群集通信在高延迟网络上运行良好。
在多区域设置中,我建议在“主要区域”中拥有一个完整(也称为最少3个实例)的群集。另一个3实例群集位于以仅从属模式运行的辅助区域中。如果主要区域完全关闭(发生得非常简陋但是显示为低),监视工具会触发辅助区域中的配置更改,以使其实例成为主要区域。所有其他需要快速读取访问的办公室然后x(x> = 1,取决于读取性能)仅从属实例。在每个位置,您都有一个HA代理(或其他LB),用于指示写入主服务器(通常位于主服务器区域)并读取到本地区域。
如果您想要超过单个群集的~20个实例,请考虑先做一个严肃的概念证明。由于主从架构,这种方法无法无限扩展。
答案 1 :(得分:0)
截至2020年,Neo4J仍然是仅可复制的图形数据库。它具有一些作为其“同步集群”一部分存在的读写“核心服务器”,然后还有一些“只读副本”。对其中一台核心服务器执行更新,然后在通知客户端提交成功之前,在(N / 2)+1个核心服务器之间同步更新。这是Neo4J对RAFT protocol的实现。这一切都意味着Neo4J实现了复制并且副本是分布式的。图的所有节点和边都限于存在于同一服务器上。
Objectivity / DB实现一个分布式数据库。 Objectivity / DB允许用户在多达65,000台服务器上分布其图,其中Node-A可以在Server-10上,Node-B可以在Server-47550上,并且它们之间的边缘可以在Server-543上。这样一来,单个连接的图就可以扩展到超出任何单个服务器的范围。数据库的接口(API)创建一个称为“单一逻辑视图”的视图,在该视图中,一旦连接到联邦数据库,客户端将拥有整个联邦中所有数据的“单一逻辑视图”,而不管其驻留在哪个主机上。这样一来,用户就可以使用较小的商品硬件来创建大量图形,而不必购买EB级服务器来创建EB级图形。
另一个优点是,它允许用户将数据放置在将要使用的位置附近。如果您的组织分布在全球各地,则可以将香港数据放置在香港中或附近,将纽约数据放置在纽约中或附近。您可以在香港和纽约的节点之间创建边缘。而且,由于查询引擎是分布式的,因此丹佛市的用户可以在所有查询中运行导航查询。