与流行的看法相反,NoSQL与性能甚至可伸缩性无关。这主要是为了最大程度地减少所谓的“对象关系”阻抗失配,而且还涉及水平可伸缩性与RDBMS的更典型的垂直可伸缩性。
对于快速插入和快速查找的简单要求,几乎所有数据库产品都可以使用。如果要添加关系数据或联接,或者需要执行任何复杂的事务逻辑或约束,则需要一个关系数据库。NoSQL产品无法比拟。
如果需要无模式数据,则需要使用面向文档的数据库,例如MongoDB或CouchDB。松散的架构是其中的主要吸引力。我个人喜欢MongoDB,并在一些自定义报告系统中使用它。当数据需求不断变化时,我发现它非常有用。
NoSQL的另一个主要选项是分布式键值存储,例如BigTable或Cassandra。如果要跨运行商用硬件的许多计算机扩展数据库,这些功能特别有用。显然,它们在服务器上也能很好地工作,但是它们并没有利用高端硬件以及SQL Server或Oracle或其他为垂直扩展而设计的数据库的优势,并且显然,它们没有关系,也不利于执行规范化或约束。另外,您已经注意到,.NET支持充其量是最多的。
所有关系数据库产品都支持有限种类的分区。它们不像BigTable或其他DKVS系统那样灵活,它们无法轻松地在数百台服务器之间进行分区,但是听起来确实不是您要的那样。只要您正确索引和规范化数据,在功能强大的硬件上运行数据库(尤其是如果可以负担的话,SSD),并在2或3或5个物理磁盘上进行分区,它们就可以很好地处理数十亿个记录。必要。
如果您符合上述条件,并且您正在公司环境中工作,并且有足够的钱花在体面的硬件和数据库优化上,那么我现在会坚持使用SQL Server。如果您花了几分钱,并且需要在低端Amazon EC2云计算硬件上运行它,那么您可能想要选择Cassandra或Voldemort(假设您可以使用.NET进行操作)。