Neo4j 分片方面

标签 neo4j scalability

我正在研究 Neo4j 的可扩展性,并阅读了 David Montag 在 2013 年 1 月撰写的文档。

关于分片方面,他说 2014 年的第一个版本将提供第一个解决方案。

有谁知道它是否已经完成或者它的状态如果没有?

谢谢!

最佳答案

披露:我是 Neo Technology 的产品副总裁,Neo4j 开源图形数据库的赞助商。

现在我们刚刚发布了 Neo4j 2.0(今天实际上是 2.0.1!)我们正在着手发布一个主要面向(甚至更多)性能和可扩展性的 2.1 版本。这会将图的上限增加到有效无限数量的实体,并改善各种其他方面。

让我先设置一些上下文,然后再回答您的问题。

正如您可能从论文中看到的那样,Neo4j 当前的水平扩展架构允许读取扩展,所有写入都将主控和扇出。这使您可以有效地无限读取扩展,并达到每秒数万次写入。

实际上,有生产 Neo4j 客户(包括 Snap Interactive 和 Glassdoor)在他们的社交图谱中拥有大约 10 亿人......超过 5 个实例)。所以这是一个关键特性:今天的 Neo4j 具有令人难以置信的计算密度,因此我们经常看到相当小的集群处理相当大的生产工作负载......响应时间非常快。

有关当前架构的更多信息,请访问:www.neotechnology.com/neo4j-scales-for-the-enterprise/
可以在此处找到客户列表(包括 Wal-Mart 和 eBay 等公司):neotechnology.com/customers/世界上最大的包裹递送承运商之一使用 Neo4j 实时路由所有包裹,峰值为每秒 3000 次路由操作,并且停机时间为零。 (这可以说是世界上最大和最关键的图形数据库和 NOSQL 数据库的使用;尽管不幸的是我不能说它是谁。)

所以从某种意义上说,tl;dr 是如果你还没有像沃尔玛或 eBay 那样大,那么你可能没问题。这只是稍微简化了它。有 1% 的情况下,您将事务性写入工作负载持续到每秒 100 万次。然而,即使在这些情况下,将所有数据加载到实时图表中通常也不是正确的做法。我们通常建议人们做一些聚合或过滤,只将更重要的东西带入图中。忒给了一个很好的谈论这个。他们将十亿 B2B 交易过滤为数量少得多的每月总交易关系,并按方向汇总计数和货币金额。

进入分片......这些天分片已经很受欢迎。这主要归功于其他三类 NOSQL,其中连接是一种反模式。大多数查询只涉及读取或写入单个离散数据。正如加入是键值存储和文档数据库的反模式一样,分片是图数据库的反模式。我的意思是...当您的所有数据都在单个实例的内存中可用时,将出现最佳性能,因为每当您读写时在网络上来回跳跃都会显着减慢速度,除非您在如何分发数据方面非常精明……即便如此。我们的方法是双重的:

  • 尽可能多地做一些聪明的事情,以支持极高的读写量,而不必求助于分片。这将为您提供最佳和最可预测的延迟和效率。换句话说:如果我们可以在不分片的情况下足够好地支持您的需求,那将永远是最好的方法。上面的链接描述了其中的一些技巧,包括部署模式,它允许您将数据分片在内存中,而不必将其分片到磁盘上(我们称之为缓存分片的技巧)。还有其他类似的技巧,还有更多的技巧......
  • 在 Neo4j 中添加一个支持分片的二级架构模式。如果最好避免分片,为什么要这样做?随着越来越多的人发现图形的更多用途,以及数据量的不断增加,我们认为最终这将是一件重要且不可避免的事情。例如,这将允许您在一个 Neo4j 集群(一个相当大的集群)中运行所有 Facebook……而不仅仅是我们今天可以处理的图表的社交部分。我们已经在这方面做了很多工作,并开发了一个我们认为平衡了许多考虑因素的架构。这是一项多年的努力,虽然我们可以很容易地发布一个天真的分片的 Neo4j 版本(这无疑会非常受欢迎),但我们可能不会这样做。我们想把它做对,这相当于火箭科学。
  • 关于Neo4j 分片方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21558589/

    相关文章:

    graph - Gremlin 查询 : Another way to write this in a loop

    主写和从读的数据库复制滞后(延迟)

    javascript - 缩放 JavaScript 函数

    MySQL:创建第二个表来存储一个实体的图像?

    architecture - 使用 mqtt 协议(protocol)和 kafka 作为消息代理

    spring-boot - Spring Data Neo4j 6 中的@Transactional

    linux - Neo4j 3.0.3 on Ubuntu : How do I load a . graphdb 文件到网络界面

    ruby-on-rails - 使用 neo4j-database 进行 Rails rspec 测试会给出 ActiveRecord::AdapterNotSpecified-error

    neo4j - 如何将 csv 文件从 hdfs 加载到 neo4j 数据库中?

    java - 用于运行 Java Web 应用程序的单个服务器的可扩展性