混合关系与非关系(MySQL 和 MongoDB)
Posted
技术标签:
【中文标题】混合关系与非关系(MySQL 和 MongoDB)【英文标题】:Blending Relational with None-Relational (MySQL and MongoDB) 【发布时间】:2014-10-07 21:49:39 【问题描述】:这个之前已经讨论过,但我还没有找到一个明确的答案,它只是粗略地描述为火和水,然后就离开了(根据我的研究)。
Relational 和 None Relational 数据库非常不同,但它们都提取数据,对于我的项目,我计划使用 None Relational 数据库,但是这将安装在很多地方,有些只能访问 mysql(后来移动) .
那么是否可以强制 MySQL 进入一种无关系模式?我使用了一种模仿它的模式,但它仍然包含迄今为止我无法克服的关系数据库的某些方面(过度依赖 ID 等,导致语法/数据结构混乱)。
那么有没有一个魔法库可以做到这一点?
这是我的数据库架构的粗略轮廓:
1 表是它包含的“元”和 id,以及类型和日期等基本通用的常用搜索字段。
1 个包含“数据”的表,每个“列”都有多行。它不能通过连接来完成,因此它需要通过 2 个查询来获取数据。
CREATE TABLE `meta` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(255) NOT NULL,
`state` tinyint(3) NOT NULL DEFAULT '0',
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
CREATE TABLE `data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`meta_id` int(11) unsigned NOT NULL DEFAULT '0',
`index` varchar(255) NOT NULL,
`value` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
正如您所见,除非按 id/date 或其他方式搜索,否则不容易搜索,它还需要 php 承担大量订购等工作。虽然不是我真正担心的,但要进行实际搜索,它需要转储整个数据库并仔细阅读......
什么样的 MySQL 架构(或概念)可以最好地复制无关系模型(并且仍然可以合理地处理搜索)?
【问题讨论】:
如果有这样一个神奇的开关存在,那么除了 MySQL 之外的任何数据库都不需要太多 如果您愿意,可以将 mysql 用作哑数据存储系统。没有什么要求您拥有多个表、外键等……如果您愿意,您可以拥有一个将整个系统存储为不透明 blob 的单个字段/单个表/单个模式。但是问题就变成了“为什么还要从数据库开始呢?” 这或多或少是为了向后兼容。我使用的数据非常动态,几乎不可能正确使用 mysql。我真的被困在这块石头和坚硬的地方之间……哈哈。我打算缓存它,我知道它也可能缺乏性能。 您可以将 JSON 或其他一些序列化数据存储在单个列中。这样做有缺点,但性能优势可能很好。也许一个好的方法是发布您的完整架构(目前有点模糊),以便人们可以查看您实际需要的内容? 添加了 SQL。我离开 JSON 的原因是搜索它(根据我的经验),你必须解析每一行,查看它并过滤掉你需要的东西。将它放在一个记录中有助于加快这一过程。 【参考方案1】:首先,没有魔法这种东西。
您重新发明了Entity-Attribute-Value 设计。这是一个非关系设计。 I've written about this before,但简而言之:您最终必须在应用程序代码中实现许多您认为在 RDBMS 中理所当然的特性,例如约束和数据类型。
这和Inner-Platform Effect的概念有关:
内部平台效应是设计一个可定制的系统的结果,它最终成为设计平台的糟糕复制品。这种动态内部平台的“定制”变得如此复杂,以至于只有程序员(而不是最终用户)才能对其进行修改。
如果这是您想花时间做的工作类型,那就去做吧。
我的偏好是将 MySQL 用于关系数据,并将非关系数据存储用于非关系数据。可以从同一个应用程序访问这两个数据库。
它只是粗略地描述为火和水,然后就这样离开了(根据我的研究)。
我认为它更像是火和棉花糖。如果您知道自己在做什么,您就可以制作出世界上最好的美食之一。或者你最终可能拿着一根被烧焦的粘糊糊覆盖的棍子。
【讨论】:
很好的解释和参考。以上是关于混合关系与非关系(MySQL 和 MongoDB)的主要内容,如果未能解决你的问题,请参考以下文章
关于将 MongoDB 与 MySQL 混合用于 Web 应用程序的建议
mysql介绍(关系型数据库),关系型与非关系型数据库,数据库与文件的对应关系,mysql启动与连接,修改mysql配置信息