20

现在,我正在开发一个 Web 应用程序的原型,该应用程序聚合来自大量用户的大量文本条目。这些数据必须经常显示回来并经常更新。目前我将内容存储在 MySQL 数据库中,并使用 NHibernate ORM 层与数据库进行交互。我已经为用户、角色、提交、标签、通知等定义了一个表。我喜欢这个解决方案,因为它运行良好,我的代码看起来不错而且理智,但我也担心 MySQL 将如何执行大小我们的数据库达到了相当大的数量。我觉得它可能很难足够快地执行连接操作。

这让我想到了MongoDBCouchDBCassandraHadoop等非关系型数据库系统。不幸的是,我两者都没有经验。我读过一些关于 MongoDB 的好评,它看起来很有趣。我很乐意花时间了解是否有一条路要走。我非常感谢在使用无关系 dbms 时需要考虑的任何一个要点或问题?

4

5 回答 5

18

这里的其他答案主要集中在技术方面,但我认为有一些重点需要关注初创公司方面:

  • 人才的可用性。MySQL 非常常见,与更稀有的数据库系统相比,您可能会发现为它找到开发人员更容易(更重要的是,更便宜)。这个更大的开发人员基础也意味着更多的教程、更活跃的支持社区等。
  • 易于开发。同样,由于 MySQL 如此普遍,您会发现它是许多系统/服务的首选数据库。这种共同点可能会使任何外部集成变得更容易一些。
  • 你正在为一种可能永远不存在的情况做准备,如果确实存在,那么它是可以控制的。很少有企业(更不用说初创公司)接近 MySQL 的极限,恕我直言(我只是在这里猜测);您的初创公司将达到那种数据吞吐量以削弱结构合理、资源充足的 MySQL 数据库的可能性几乎为零。

基本上,不要花时间(== 钱)担心使用哪个数据库,因为 MySQL 可以处理大量数据,并且得到了很好的证明和支持。

回到事物的技术方面......与选择数据库相比,对您的应用程序速度的影响要大得多的东西缓存数据的效率。有效的缓存可以显着降低数据库负载并加快应用程序的总体响应速度。我会花时间研究缓存解决方案,并确保您开发应用程序的方式可以充分利用这些解决方案。

仅供参考,我选择的缓存解决方案是memcached

于 2010-05-15T14:24:54.877 回答
8

到目前为止,还没有人提到 PostgreSQL 在关系方面可以替代 MySQL。请注意,MySQL 库是纯 GPL,而不是 LGPL。如果你链接到它们,这可能会迫使你发布你的代码,尽管也许有更多法律经验的人可以更好地告诉你其中的含义。另一方面,链接到 MySQL 库与仅连接到服务器并发出命令不同,您可以使用封闭源代码来做到这一点。

PostreSQL 通常是 Oracle 最好的免费替代品,BSD 许可证应该对业务更友好。

由于您更喜欢非关系数据库,因此请考虑过渡将更加戏剧化。如果您需要自定义数据库,您还应该考虑许可证类型因素。

有三件事真正对哪一个是您最好的数据库选择产生深远影响,而您没有提到:

  1. 数据的大小或是否需要在数据库中存储文件。
  2. 大量读取和很少(甚至受限)写入。在这种情况下,您需要的不仅仅是数据库,还需要一个目录,例如 LDAP
  3. 数据分发和/或复制的重要性。大多数关系数据库或多或少都可以很好地复制,但是由于它们的概念/设计也不能处理数据分发......但是您是否会处理不适合一台服务器或具有需要特殊单独的访问权限的尽可能多的数据/额外的服务器?

然而,大多数人会因为不喜欢学习 SQL 而选择非关系型数据库

于 2010-05-15T14:14:28.913 回答
1

您认为什么是大量数据?MySQL,基本上是大多数关系数据库引擎,可以处理相当大量的数据,具有适当的索引和健全的数据库模式。

你为什么不试试 MySQL 在你的设置中如何处理更大的数据量呢?制作一些脚本,为 MySQL 测试数据库生成真实数据,并在系统上产生一些负载,看看它是否足够快。

只有当速度不够快时,才开始考虑优化数据库,更换不同的数据库引擎。

小心NHibernate,很容易制作一个很好且易于编码的解决方案,但在大量数据时性能很差。例如,应仔细考虑是否使用关联的惰性或急切获取。我并不是说您不应该使用 NHibernate,但请确保您了解 NHibernate 的工作原理,例如“n + 1 选择”问题的含义。

于 2010-05-15T09:15:48.077 回答
1

衡量,不要假设。

如果应用程序在每种情况下都正确编写,并且运行它的系统经过适当调整,那么关系数据库和 NoSQL 数据库都可以实现巨大的扩展。

因此,如果您有 NoSQL 的用例,请对其进行编码。或者,如果您对关系更满意,请编写代码。然后,衡量它的性能如何以及如何扩展,如果可以,请继续使用,如果不行,请分析原因。

只有在了解了性能问题后,您才应该去寻找新奇的技术,除非您对该技术感到满意或出于其他原因想要尝试它。

于 2010-05-15T10:08:53.713 回答
1

我建议您尝试每个数据库并选择最容易开发应用程序的数据库。去http://try.mongodb.org用一个简单的教程来试试 MongoDB。不要太担心速度,因为一开始开发人员的时间比 CPU 时间更有价值。

我知道许多 MongoDB 用户已经能够放弃他们的 ORM 和他们的缓存层。Mongo 的数据模型比关系表更接近您使用的对象,因此您通常可以直接按原样存储您的对象,即使它们包含嵌套对象的列表,例如带有评论的博客文章。此外,由于 mongo 对于大多数站点来说足够快,因此您可以避免处理缓存的复杂性,并且通常会提供更实时的站点。例如,Wordnik.com报告250,000 次读取/秒和 100,000 次插入/秒,具有 1.2TB / 50 亿对象数据库。

有几种方法可以从 .Net 连接到 MongoDB,但我对该平台没有足够的经验来知道哪种方法最好:

免责声明:我在 MongoDB 上为 10gen 工作,所以我有点偏见。

于 2010-05-17T18:37:23.413 回答