现在我正在开发一个Web应用程序的原型,它聚合了来自大量用户的大量文本条目。必须经常显示此数据并经常更新。目前,我将内容存储在MySQL数据库中,并使用NHibernate ORM层与数据库进行交互。我有一个为用户,角色,提交,标签,通知等定义的表。我喜欢这个解决方案,因为它运行良好,我的代码看起来很好,理智,但我也担心MySQL将如何执行大小我们的数据库达到了很多。我觉得它可能很难以足够快的速度执行连接操作。
这让我想到了非关系型数据库系统,例如MongoDB,CouchDB,Cassandra或Hadoop。不幸的是,我也没有经验。我在MongoDB上看过一些好评,看起来很有趣。我很乐意花时间学习如果有人走的路。我非常感谢任何一个提供积分或问题时不考虑任何关系dbms?
答案 0 :(得分:18)
这里的其他答案主要集中在技术方面,但我认为重点关注初创公司方面的事情:
基本上,不要花时间(==钱)担心要使用哪个数据库,因为MySQL可以处理很多数据,这已得到充分证明并得到很好的支持。
回到技术方面......对于应用程序的速度而言,远对选择db的影响更大的是缓存数据的效率即可。有效的缓存可以对减少数据库负载和加快应用程序的一般响应性产生巨大影响。我会花时间研究缓存解决方案,并确保以可以充分利用这些解决方案的方式开发应用程序。
仅供参考,我选择的缓存解决方案是memcached。
答案 1 :(得分:8)
到目前为止,没有人提到PostgreSQL在关系方面是MySQL的替代品。请注意,MySQL库是纯GPL,而不是LGPL。如果您链接到它们,这可能会迫使您释放您的代码,尽管具有更多法律经验的人可能会更好地告诉您其影响。另一方面,链接到MySQL库与仅连接到服务器和发出命令不同,您可以使用封闭源来实现。
PostreSQL通常是Oracle的最佳免费替代品,BSD许可证应该更加商业化。
由于您更喜欢非关系数据库,因此请考虑转换将更具戏剧性。如果您需要自定义数据库,还应考虑许可证类型因素。
对于哪一个是您最佳的数据库选择而且您没有提及,有三件事情确实会产生深远的影响:
然而,大多数人只会因为不喜欢学习SQL而选择非关系型数据库
答案 2 :(得分:1)
您认为大量数据是什么? MySQL,基本上是大多数关系数据库引擎,可以使用适当的索引和合理的数据库模式处理相当大量的数据。
为什么不在设置中尝试更大数据量的MySQL行为?制作一些脚本,为MySQL测试数据库生成真实的数据,并在系统上产生一些负载并查看它是否足够快。
只有当它不够快时,首先考虑优化数据库并更改为不同的数据库引擎。
小心使用NHibernate,很容易找到一个好的,易于编码的解决方案,但是在大量数据的情况下性能很差。例如,应该仔细考虑是否使用与关联的懒惰或急切提取。我并不是说你不应该使用NHibernate,而是要确保你理解NHibernate是如何工作的,例如“n + 1选择”-problem意味着什么。
答案 3 :(得分:1)
测量,不要假设。
关系数据库和NoSQL数据库都可以进行大规模扩展,如果在每种情况下正确编写应用程序,并且运行的系统是否经过适当调整。
因此,如果您有NoSQL的用例,请编写代码。或者,如果你对关系更熟,那就是代码。然后,测量它的表现如何以及它如何缩放,如果没有问题,请使用它,如果没有,请分析原因。
只有当您了解自己的性能问题时,才应该去寻找异国情调的技术,除非您对该技术感到满意,或者出于其他原因想要尝试它。
答案 4 :(得分:1)
我建议您尝试每个数据库并选择最容易开发应用程序的数据库。转到http://try.mongodb.org,使用简单的教程尝试MongoDB。不要太担心速度,因为在开始时开发人员的时间比CPU时间更有价值。
我知道许多MongoDB用户已经能够放弃他们的ORM和他们的缓存层。 Mongo的数据模型比关系表更接近于您使用的对象,因此您通常可以直接存储对象,即使它们包含嵌套对象的列表,例如带有注释的博客文章。此外,由于mongo对于大多数站点来说足够快,因此可以避免处理缓存的复杂性,并且通常可以提供更实时的站点。例如,Wordnik.com reported 250,000读/秒和100,000插入/秒,1.2TB / 50亿对象DB。
有几种方法可以从.Net连接到MongoDB,但我没有足够的经验来了解哪个最好的平台:
免责声明:我在MongoDB上为10gen工作,所以我有点偏颇。