我正在寻找关于哪个数据库用于项目的一些帮助或指导。如果您可以提出任何要点或注意缺陷,回答任何问题或推广任何数据库类型以达到我即将阐明的目的,我将非常感激。
反正:
我们有一些跟踪表单的软件。
我们的用户可以拥有许多不同的属性 数以百计的设置,我不是那种广泛的MySQL表的粉丝。一世 真的很喜欢Mongo。
我们有不同类型的表格,每种表格都可以完全不同 领域。现在,我们有一个包含通用数据的表单列表 加入相关表格以获取更多数据。我会全部的 这些字段与Mongo在一个不同的文档中,我很容易 添加字段而不用担心。
我们在每张表格上都有费用,备注和历史记录。我喜欢他们在MySQL中的表现 在不同的表格中,我可以通过表格或用户获取历史记录 - 与笔记相同。
我们的政策几乎保留所有数据,甚至删除或预编辑 数据......永远。我可以做 担心达到规模限制?我们可能在2013年底之前谈论100gb
每页有多少Mongo查询会让事情陷入困境? 20? 100?将 如果我在服务器上有SSD,那会改变吗? (现在,我们有 60 MySQL查询页面。这可以改进。)
我的第一个Mongo项目是否有点重要,这是一个坏主意 一点软件?这是我可以学习的东西吗?
我喜欢MySQL列名称的大小写不敏感的快速和 脏东西。
在MySQL中,我将事情分解为不同的表格。在Mongo中,将数据放在一起可以分开吗?示例:username, email, phone, license1 => [num,isValid], license2 => [num, isValid], notifications => [notification1...notification50000], password hash, salt, setting1, setting2...setting1000, permission1, permission2...permission1000
当然,我会使用嵌套样式进行整理,但是最好将所有这些存储在“user”下,还是将其分解为设置,许可,权限?第二个例子:formName, address, notes => [note1 => [user,note,date], note2 => [user,note,date]]
进行HYBRID设置有什么问题,其中用户数据是Mongo,表单数据是MySQL吗?
我们必须运行大量报告,Mongo中是否存在限制?例如,我是否会遇到问题,寻找过去40天内的每个表格,费用超过10美元,每行的费用总计,按填写用户的年龄排序?
数据冗余 - 在Amazon云上,MySQL拥有大量冗余。有没有与Mongo相匹配的服务?进入我自己的设置是否很复杂?
MongoDB是否受到任何“云”提供商的支持? AWS为MySQL做了很多工作,但看起来我自己就是Mongo
只是我头脑中的一些事情 - 我真的很感激任何人都要说的。
答案 0 :(得分:7)
我们的用户可以拥有许多不同的属性 数以百计的设置,我不是那种广泛的MySQL表的粉丝。一世 真的很喜欢Mongo。
我们有不同类型的表格,每个表格都可以完全 不同的领域。现在,我们有一个带有通用的表单列表 数据,然后加入相关表以获取其他数据。我会 所有这些字段都在Mongo的一个不同文档中,我可以轻松地添加字段而不用担心。
从您的帖子我明白,您的最终目标是处理用户和包含不同模式(也称为无模式)的表单。我相信mongodb是一个正确的选择。
我们在每张表格上都有费用,备注和历史记录。我喜欢他们在MySQL中的表现 在不同的表格中,我可以通过表格或用户获取历史记录 - 与笔记相同。
没问题,您可以使用不同的文档(或基于其大小的嵌入式文档 - 文档的最大大小为16 MB)来处理此问题而没有任何问题。所以你可以拥有类似
的架构 Form
- form field1
- form field1
- id of the fees doc
- id of the notes doc
- id of the history doc
或(对于嵌入式文档)
Form
- form field1
- form field2
- embedded fees doc
- fees field1
- fees field2
- embedded notes doc
- notes field1
- notes field2
我们的政策几乎保留所有数据,甚至删除或预先编辑数据......永远。 >我是否应该担心达到尺寸限制?我们可能在> 2013之前谈论100gb
您将存储您将要执行的数据,已经有production deployments存储数据超过太字节。
我的第一个Mongo项目是一个有点重要的一点是不是一个坏主意 软件?这是我可以学习的东西吗?
是的,如果您打算使用mongodb而不对您的应用程序模型进行原型设计。我建议实现(原型)你的应用程序的最小集合(如在mysql中很糟糕的功能)并学习基础知识,看看你有多舒服。
我喜欢MySQL列名称不区分大小写的快速和脏东西。
Mongo强制执行区分大小写,因为这是BSON(以及JSON)键值对的性质。
在MySQL中,我将事情分解为不同的表格。好吗,在 Mongo,把数据放在一起可以分开吗?示例:username, 电子邮件,电话,license1 => [NUM器,isValid]
mongo相对于其他sql数据存储的主要优点是,您可以在同一文档中存储尽可能多的相关信息(在16 MB大小内)。如果您不确定数据的大小或某些部分是否在增长,那么您可以将该部分拆分为另一部分。由于您不关心查询,因此会大大减少请求数量。
在进行HYBRID设置时是否存在任何问题,其中用户数据是 Mongo和表单数据是在MySQL吗?
绝对不是,事实上我目前正在运行mongodb和mysql(仅针对交易)。但是如果你没有处理任何交易,你可以坚持使用mongodb。
我们必须运行大量报告,对此有限制 蒙戈?例如,我是否会遇到寻找每个表单的问题 从过去的40天开始,收费超过10美元,每行收费 总计,按填写用户的年龄排序?
不,我没有看到任何限制。事实上,它使用适当的索引进行快速处理查询。但是有一些事情你不能像普通连接那样使用mongo,而是可以使用map / reduce来处理报告数据。
MongoDB是否受到任何“云”提供商的支持? AWS做了很多工作 MySQL,但看起来我自己就是Mongo
Mongohq,Mongolab是一些专门管理的mongo托管服务。还有redhat openshift& vmware cloundfoundry为mongo提供托管平台,你可以查看mongo hosting center了解更多信息
希望这有帮助
答案 1 :(得分:5)
您可以使用MongoDB或MySQL来满足您的需求。要注意的主要是缩放。在MySQL中,您可以垂直缩放。你得到一台更大的机器,更好的机器。并希望它有所作为。在MongoDB中,您可以水平扩展。您有多台计算机和shard。垂直缩放有一个限制。但水平缩放不会。在成本缩放方面,垂直易于理解。横向缩放通常会导致购买一组机器,然后当您想要进一步扩展时,它会变成指数级。所以这是你必须考虑的事情。
进行统计查询是MongoDB的缺点。原因有几个。首先,将有MongoDB中没有的MySQL功能。其次,对于那些更像数据库人并且对SQL语句非常熟悉的人来说,他们可能很难适应MongoDB的语法。这是一个值得学习的新东西。人们常常喜欢(并且与之合作)他们所知道的东西。
与大多数其他'NoSQL'平台一样,MongoDB不使用ACID,这给它带来了一点性能提升。但这确实意味着风险更大。
有一些基于云的解决方案。请查看MongoHQ和MongoLab。我可能错了,但我不相信他们有SSD。这都是锭子。但ping他们的支持。他们通常会快速回复。
根据我的经验,MongoDB确实很快。非常快。当你有大型表,联接等时,MySQL很慢。你可以像预期的那样在MongoDB中编制索引。我已经看到,如果你索引太多的东西,或者像必须索引每个元素的数组之类的东西,那么每次事务可能会更加沉重。
我不会把你推向任何一个方向。这需要一些研究。我不会说使用MongoDB对于这么大的项目来说是一个坏主意,但需要时间来确定它是否适用于您的情况。与所有事情一样。
有一些替代方案,特别是MySQL的专有扩展,可以为您带来巨大的性能提升(取决于您的设置,平均交易类型等)。我想到的是InfoBright,但这些通常很昂贵。
答案 2 :(得分:0)
以下是有关云中MongoDB的一些信息:http://www.mongodb.org/display/DOCS/Hosting+Center