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

这让我想到了非关系数据库系统,例如 MongoDB, 沙发数据库, 卡桑德拉 或者 Hadoop. 。不幸的是我没有这方面的经验。我读过一些关于 MongoDB 的好评,它看起来很有趣。我很高兴花时间了解是否可行。我非常感谢任何人提供在使用非关系数据库管理系统时需要考虑的要点或问题?

有帮助吗?

解决方案

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

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

基本上,不要花时间(==金钱)担心使用哪个数据库,因为 MySQL 可以处理 很多 数据,已得到充分证明和充分支持。

回到技术方面......某物将会有一个 远的 与数据库的选择相比,对应用程序速度的影响更大的是数据的效率 缓存的. 。有效的缓存可以对减少数据库负载和加快应用程序的总体响应速度产生巨大的影响。我会花时间研究缓存解决方案,并确保您开发应用程序时能够充分利用这些解决方案。

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

其他提示

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

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

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

有三件事真正对您的最佳数据库选择产生深远影响,但您没有提及:

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

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

你认为什么是数据的显著量? MySQL的,基本上大多数关系型数据库引擎,可以处理相当大的数据量,在适当的索引和健全的数据库架构。

你为什么不尝试的MySQL的行为有更大的数据量在您的设置?做一些脚本,产生真实的数据到MySQL测试数据库和并生成系统的一些负载,看看它是否足够快。

只有当它是不够快,第一开始考虑优化数据库并改变到不同的数据库引擎。

小心 NHibernate的,很容易使一个解决方案是好的,易于码有,但大数据量的糟糕表现。例如是否使用延迟或预先抓取与协会应慎重考虑。我的意思不是说你不应该使用NHibernate的,但要确保你了解NHibernate的是如何工作的,比如什么“N + 1个选择” - 问题的手段。

测量,不承担。

关系数据库和NoSQL数据库既可以极大规模,如果应用程序是正确的在每种情况下写入,并且如果该系统在其上运行的适当调整。

所以,如果你有一个使用案例的NoSQL,代码它。或者,如果你更舒适的关系,代码这一点。然后,措施以及它如何执行,以及如何扩展,如果它的好,去用它,如果不是,分析一下原因。

只有当你了解你的性能问题,你应该去寻找异域风情的技术,除非你是舒适与技术或想尝试一些其他原因。

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top