Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 此用例的最佳数据库?MongoDB似乎无法扩展_Database_Mongodb_Neo4j_Cassandra_Orientdb - Fatal编程技术网

Database 此用例的最佳数据库?MongoDB似乎无法扩展

Database 此用例的最佳数据库?MongoDB似乎无法扩展,database,mongodb,neo4j,cassandra,orientdb,Database,Mongodb,Neo4j,Cassandra,Orientdb,正在开发一种非常火而忘却的应用程序,这是一种web爬行应用程序,从internet收集成千上万的项目(通常是数百万次),并将其存储在nosql集合中(目前使用MongoDB)。这些集合非常不稳定,这意味着它们的创建和删除速度非常快。数据访问也是非常随机的,因此理论上,我的应用程序可以在系统运行时创建一个集合,并在系统运行时删除--另外,几个月前创建的集合将被随机访问以进行更新和读取。我说的是成千上万的藏品,每个藏品可能有数百万份文档 长话短说,MongoDB的问题在于,它在这种情况下似乎表现不佳

正在开发一种非常火而忘却的应用程序,这是一种web爬行应用程序,从internet收集成千上万的项目(通常是数百万次),并将其存储在nosql集合中(目前使用MongoDB)。这些集合非常不稳定,这意味着它们的创建和删除速度非常快。数据访问也是非常随机的,因此理论上,我的应用程序可以在系统运行时创建一个集合,并在系统运行时删除--另外,几个月前创建的集合将被随机访问以进行更新和读取。我说的是成千上万的藏品,每个藏品可能有数百万份文档

长话短说,MongoDB的问题在于,它在这种情况下似乎表现不佳。他们的缓存和WiredTiger引擎的设计方式不适合处理对集合的随机访问,也不适合动态创建和删除集合。复制已经变成了一场噩梦,写入操作常常会暂停,数据库基本上得到了难以置信的备份。不幸的是,将我的应用程序扩展到成千上万的用户似乎是MongoDB的禁忌

那么,有人知道或者可以推荐适合这种工作负载的数据库吗?我们利用地理索引和全文索引,因此这基本上是唯一的要求。我愿意学习和尝试任何东西,最好是图形数据库——但性能和生产准备是关键

< P>强烈推荐使用“火忘”的用例APACHE Casdand,甚至更好的ScyllaDB(正如我对卡桑德拉的理解,从C++的基础上重新编写的类固醇中获得最佳性能)。你可以做谷歌搜索的性能比较,两者都是优秀的情况下的写性能(不是那么好的读性能,请注意我说的“不是那么好”,不坏或最坏)

ApacheCassandra是免费的商业用途,因此这是另一个绿灯。语法很像SQL(请不要这样,我说的很像不是SQL),所以它相对容易快速学习。此外,我们已经在GNU/Linux和MicrosoftWindows服务器集群上成功运行了它

正如在卡桑德拉身上交付的一样,“锡拉”的语法基本相同

在我的例子中,我们已经运行Cassandra集群将近3年了,并且将我们所有的工作流程和以前的项目全部迁移到ApacheCassandra上。虽然一开始最困难的事情是理解内部工作的基本概念和卡桑德拉“先查询再数据模型”的思维方式,但我只能表达对性能的良好印象


我希望它能对您的研究任务有所帮助。

您没有说现有MongoDB部署有什么特别的问题-“数据库正在备份”不是一个可操作的问题报告

您还没有提到切分,这可能是您在MongoDB上描述的工作负载类型的第一个建议

我得到的印象是,您可能有一个单一的副本集,这是一个巨大的副本集,您在数据集上执行大量的读写操作,同时执行DDL。我不知道哪些数据库是为这种工作负载设计的,但我的第一反应是将数据集分成更小的部分

MongoDB在一定程度上提供了对整个数据集的一种极其丰富的查询语言,并支持事务性和分析性用例。我的印象是,许多非关系型数据存储(包括我对Cassandra的印象,尽管它可以追溯到2010年左右,并且不是最新的)不支持这种用例范围。当然,他们可能提供更好的性能,但在一个大大减少的功能集。因此,作为另一种选择,我将考虑例如SARIDEN,它将更多的努力从数据库中移到应用程序,但是如果需要的话,仍然可以保持MQL和ACID事务。
我不知道您已经做了多少调整—不要假设您做得不够,但您在这里提出的问题基本上是“我有一个10 TB的数据集,我需要一个快速的数据库”。考虑到这种详细程度,您可能得到的最多是一个数据存储列表。

可能需要查找内存中的数据库。(MongoDB也支持该功能)需要存储至少10TB的数据,而数据集却在稳步增长——不幸的是,为了让MongoDB的内存中的db正常工作,您的数据集必须装入(或关闭)从Scyllab传入的内存中。我们完全可以提供10TB规模的一致性能。出于性价比原因,我们建议使用SSD,而不是内存。然而,话虽如此,OP确实需要更好地描述他们的数据模型,以及您希望针对收集的数据运行的查询类型。例如,GeoJSON是MongoDB和ilk特有的。也许RejectionDB也是一种替代方案,除非你想进行数据重构。嗯,此外,Cassandra和Scyllab不是单点故障的NoSQL数据库,因此基本上不需要像MongoDB那样存在任何主数据库。根据“一致性级别和复制因素”,您总是有机会“丢失”两台服务器,而对总体信息没有影响或影响最小。问题源于其WT引擎的快照和检查点机制。对于这种类型的用例来说,有太多的流量让它无法跟上,不断收集的额外开销创建/删除了他们向我解释的问题。我亲眼目睹mongodb爬行到这样一个地步,简单的插入和更新需要几分钟,因为这些检查点有时需要多长时间。我已经就这个问题与他们进行了磋商