通常你的问题会被归类为过于主观,实际上也是这样。不过,我会回答一个问题,不管这个问题希望能帮助你一点。
我的回答是基于MongoDB的,因为那是我最了解的技术。
主表是一个总计,最初将有3到4亿条记录,但应该有进一步增长的空间。
这对于任何数据库都很容易,让我知道当你开始获得数十亿行时。
对于记录的10%到20%,最多每隔几分钟更新将非常频繁。
我不知道该怎么查询,如果你打算增加文件大小急剧使用这些更新,那么除非你用你的文档字段或http://docs.mongodb.org/manual/reference/command/collMod/#usePowerOf2Sizes的预页头,这将保证你会发现碎片,你会但是执行的MongoDB在记录对象中总是有足够的连续可用空间来更新它,而无需移动它。
这是因为与许多其他技术(如SQL)不同,MongoDB不会在磁盘上分割记录对象,而是将文档全部放在一个连续的空间块中。
如果您希望了解更多关于MongoDBs存储机制如何影响数据集性能的信息,您可以查看以下演示文稿:http://www.10gen.com/presentations/storage-engine-internals,我仍然认为这是最具权威性的解释。
对整个集合的查询将非常频繁。所有查询都将覆盖多个属性并使用范围值。一般来说,它们将具有以下形式:select * from huge_table其中字符串('x','y')和整数= 1,货币介于1,05和100,00之间,日期> 2012-01-01 00:00: 00。
MongoDB具有良好的“缓存”数据机制。我将缓存放入语音标记,因为MongoDB在技术上没有查询缓存,但虚拟内存映射中的所有数据(不是RAM映射,完全不同)。
当您定期执行相同的查询时,您会发现您的工作集http://en.wikipedia.org/wiki/Working_set定义了在特定间隔内需要多少数据才能执行MongoDB的高性能操作,完全在RAM中。这意味着所有的查询都可以直接从RAM中提供,使得它们超级快速(例如像Redis和Memcached的技术来自RAM的服务)。
没有要求支持复杂的数据类型。
的MongoDB并不需要复杂的数据类型,但它们可以被添加,如果你发现了以后,你真正想要他们:http://docs.mongodb.org/manual/core/document/#bson-type-considerations但它是(因为该网页说的)好随身携带的MongoDB提供到字段类型考虑。一个很好的例子是,在MongoDB中使用内建的date
类型是明智的做法,这样您可以在查询中轻松访问日期操作符。
数据丢失是不可取的,但不是灾难性的。
MongoDB中被认为是从次级和无论是在与外部的单个数据中心(http://docs.mongodb.org/manual/replication/)的其它副本成员读取时具有强一致性(不像SQL不立即虽然),补充说,它是能够做复制品的ACKED写入也是如此(这增加了强大的一致性),如果一个节点发生故障并自动进行故障转移,那么这非常有用,这样可以减少数据集受到负面影响的机会(例如,您可能会遇到更多问题最终一致的环境,如在这种特殊情况下的CouchDB)。
补充说,MongoDB确实有一个日志和操作日志,以帮助它保持数据更好,干净,正确归档。
硬件成本本身并不是一个问题,但我需要能够逐渐扩展硬件。因此,运行在或多或少标准Web服务器上的系统是最好的。如果它可以在虚拟机上运行,甚至更好。
MongoDB能够在商品硬件上运行,所以这应该不成问题。
这应该提供一些指针让你继续。
如果不建立一些POC,请不要作出选择,尤其是考虑到您以后无法切换的评论。这个问题并不适合StackOverflow。 – WiredPrairie
^这么多。如果没有适当的POC和eval,就只能乞求失败。 – moodywoody
每5分钟更换3亿条记录中的10%,每秒会发生100,000次更改。你确定你的号码是真实的吗? – Theo