16

像 MongoDB 和 db4o 这样的对象数据库最近得到了很多宣传。每个和他们一起玩的人似乎都喜欢它。我猜他们在他们的示例应用程序中处理了大约 640K 的数据。

有没有人尝试过使用具有大量数据(例如 50GB 或更多)的对象数据库?您是否仍然能够对它执行复杂的查询(例如从搜索屏幕)?它与您通常选择的关系数据库相比如何?

我只是好奇。我想尝试对象数据库,但我需要知道它是否适用于示例应用程序以外的东西。

4

7 回答 7

10

有人刚刚在 MongoDB 中使用 12 TB 的数据投入生产。我之前知道的最大的是 1 TB。很多人在 Mongo 中保存了大量的数据。

重要的是要记住 Mongo 的工作方式很像关系数据库:您需要正确的索引才能获得良好的性能。您可以在查询中使用 explain() 并联系用户列表寻求帮助。

于 2010-03-23T20:22:19.280 回答
6

当我在 2000 年开始使用db4o时,我并没有想到庞大的数据库。关键目标是用一行代码非常简单地存储任何复杂的对象,并以低资源消耗快速、好地做到这一点,因此它可以在嵌入式和移动设备上运行。

随着时间的推移,我们有许多用户将 db4o 用于 webapps,并且拥有大量数据,接近今天 256GB 的最大数据库文件大小(配置的块大小为 127 字节)。所以回答你的问题:是的,db4o 可以使用 50GB,但你不应该计划将它用于 TB 的数据(除非你可以很好地将数据拆分到多个 db4o 数据库中,单个数据库的设置成本可以忽略不计,你可以打电话 #openFile() )

db4o 于 2008 年被Versant收购,因为它的功能(嵌入式、低资源消耗、轻量级)使其成为 Versant 高端对象数据库VOD的绝佳补充产品。VOD 可扩展大量数据,并且比关系数据库做得好得多。我认为它只会轻笑超过 50GB。

于 2010-05-15T16:17:13.827 回答
3

MongoDB 为 SourceForge、纽约时报和其他几个大型数据库提供支持...

于 2010-03-23T18:55:55.553 回答
3

您应该阅读MongoDB 用例。只是在玩技术的人通常只是在看它是如何工作的,而不是在他们能够理解其局限性的地步。对于正确类型的数据集和访问模式,50GB 对于在正确硬件上运行的 MongoDB 来说不算什么。

这些非关系系统着眼于 RDBM 所做的权衡,并对其进行了一些改变。在某些情况下,一致性不如其他事情重要,因此这些解决方案可以让您将其换成其他事情。在某些情况下,权衡仍然是相对较小的毫秒或秒。

CAP 定理也值得一读。

于 2010-03-23T18:58:53.600 回答
3

我正在考虑将我确定的 API 与我写了一段时间的堆栈溢出 iphone 应用程序一起从它当前位于 MySQL 数据库中的位置移回 MongoDB。原始形式的 SO CC 转储在数 GB 范围内,而我为 MongoDB 构建文档的方式产生了 10G+ 的数据库。可以说我没有很好地构建文档,但我不想花费大量时间来做这件事。

如果您从这条路开始,您将遇到的第一件事就是缺乏 32 位支持。当然,现在一切都在转向 64 位,但请记住一些事情。我认为任何主要的文档数据库都不支持 32 位模式的分页,从代码复杂性的角度来看,这是可以理解的。

为了测试我想要做什么,我使用了一个 64 位实例 EC2 节点。我遇到的第二件事是,即使这台机器有 7G 内存,当物理内存耗尽时,事情也从快到不那么快。我不确定此时我没有设置错误,因为不支持 32 位系统扼杀了我想要使用它的功能,但我仍然想看看它的样子。将相同的数据转储加载到 MySQL 中大约需要 2 分钟,但我用来加载两个数据库的脚本的工作方式不同,所以我无法进行很好的比较。只将数据的一个子集运行到 MongoDB 中,只要它产生一个小于 7G 的数据库,它就会快得多。

我认为我从中得出的结论是,大型数据库可以正常工作,但如果您想保持高性能,您可能需要比传统数据库更多地考虑数据的结构。我看到很多人使用 MongoDB 进行日志记录,我可以想象其中很多数据库都很庞大,但同时它们可能不会进行大量随机访问,因此可能会掩盖更传统应用程序的性能.

最近的一个可能有用的资源是nosql 系统的可视化指南。在 MongoDB 之外还有很多选择。我也使用过 Redis,尽管没有那么大的数据库。

于 2010-03-23T19:32:06.787 回答
1

也许值得一提。

欧洲航天局的普朗克任务正在 Versant 对象数据库上运行。 http://sci.esa.int/science-e/www/object/index.cfm?fobjectid=46951

这是一颗去年发射的带有 74 个机载传感器的卫星,用于绘制宇宙的红外光谱并将信息存储在地图分段模型中。这些天来,它得到了大量的炒作,因为它产生了一些有史以来最酷的宇宙图像。

无论如何,它已经生成了 25T 的信息存储在 Versant 中,并在 3 大洲进行了复制。明年任务完成时一共50T

可能还值得注意的是,对象数据库往往要小得多来保存相同的信息。这是因为它们是真正规范化的,连接没有数据重复,没有浪费的空列空间和很少的索引,而不是 100 个。您可以找到有关测试 ESA 是否考虑以多列关系数据库格式存储 -vs- 使用适当的对象模型并存储在 Versant 对象数据库中的公共信息。他们发现使用 Versant 可以节省 75% 的磁盘空间。

这是实现: http ://www.planck.fr/Piodoc/PIOlib_Overview_V1.0.pdf

他们在这里谈论在测试中发现的 3T -vs- 12T http://newscenter.lbl.gov/feature-stories/2008/12/10/cosmic-data/

此外......有一些基准可以在任务的分析方面更快地显示 Versant 数量级。

干杯,-罗伯特

于 2010-06-09T15:24:37.107 回答
1

以下是 db4o 的一些基准测试:

http://www.db4o.com/about/productinformation/benchmarks/

我认为这最终取决于很多因素,包括数据的复杂性,但 db4o 似乎肯定是其中最好的。

于 2010-03-23T18:59:10.803 回答