mysql - 一起使用 MySQL 和 MongoDB

标签 mysql mongodb database-design database

我以前从来没有用过NoSQL,一般我写的应用都是需要关系的。但是,我遇到了一些我不知道如何去做的事情。到目前为止,我只是在设计数据库。现在,我的主要逻辑在 MySQL 数据库中。我有将通过 CDN 托管的静态内容。但是,我有动态内容会更新,但很少更新,但几乎会在每次请求时阅读 - 例如电话号码、电子邮件地址、地址、其他信息。它们不会用于搜索,但是这些数据是非结构化的。一个用户可以有多个电子邮件地址、电话号码和地址;并且它们将需要用于多个表。因此,在这种情况下使用关系数据库无法满足我的需求(我不想为此创建实体属性值表)并且因为我知道它不会影响逻辑 - 它仅用作“元- data"我想将它们保存为 JSON 格式。在谷歌搜索了一段时间后,我发现 MongoDB 以 JSON 格式存储“文档”,这听起来像是完美的解决方案。但是,我对此有一个疑问。如何将这些数据库连接在一起?我是否只需要在创建/更新时为文档添加 user_id 或 organization_id“列”/字段并执行“选择”查询(MongoDB 中的等效项)以接收元数据?或者有什么不同的方法吗?

最佳答案

我会在这里提出我的意见。您在这里尝试做的事情称为“多语言持久性”。如果你引入 mongo,你将有 2 种架构来存储你的数据,在强度、api、设计等方面不同,这是有代价的。

Mongo DB 是一个很棒的产品,我自己使用它并取得了巨大的成功,但您必须了解它并没有像 MySQL 那样提供您期望从 RDBMS 获得的所有功能。例如,它完全没有交易。 此外,如果你同时存储在 MySQL 和 Mongo 中,你将不得不自己关心数据完整性(如果作为逻辑事务的一部分,mysql 事务成功,但 mongo 未能存储数据,会发生什么),没有回滚...... 我相信你明白我的意思。

是的,mongo 确实允许通过各种 JSON 参数进行查询,事实上它具有整个查询语言,它在某种程度上类似于 SQL,但它不是真正的“关系”查询引擎,因为 mongo 不是关系数据库,例如,您没有 JOIN。但是你自己说过你不会通过这些字段进行搜索,所以我有点不明白你使用 mongo 会有什么好处。也许这只是关于术语,但我对这种说法有点困惑。

当您拥有大量数据(毕竟是大数据产品)时,mongo 真正发挥作用的地方就是副本集和分片等有趣的东西,但问题是您是否真的需要它?你真的有“大数据”——要存储大量的对象吗?

作为替代方案,我认为您可以使用文本列“按原样”存储 JSON。我的意思是,您可能有一个列,用于存储 JSON。 您甚至有时在数据库中将“JSON”类型作为 native 类型,我不确定 MySQL 是否支持它。 在这种情况下,您甚至可以对这些 json 执行一些操作(例如追加、部分更新等)。

当然选择权在你,我想说的是你应该考虑使用 2 个持久化引擎是否有更多的好处,或者会让你的项目更复杂。

希望对你有帮助

关于mysql - 一起使用 MySQL 和 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25505347/

相关文章:

mysql - 复杂的查询逻辑

c# - 使用 FSharp 获取有关 MongoDB 集合的一般信息

mongodb - 查找在聚合步骤中找到的共享 max(value) 的所有文档

mysql - mysql中如何最小化表的列

java - 将 Java 域对象映射到表的良好设计(使用 Hibernate)

sql - 存储和查询每行不同的定价结构?

mysql - 使用 Slick 3.0 调用简单的数据库过程

MySQL 查询平均 3 列并排除 0?

php - Symfony2 和 DateTimePicker 错误的日期格式?

mongodb - 在 MongoDb 上序列化 get-only 属性