混合关系与非关系(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)的主要内容,如果未能解决你的问题,请参考以下文章

01关系型数据库与非关系型数据库

关于将 MongoDB 与 MySQL 混合用于 Web 应用程序的建议

MongoDB与MySQL效率对比

mysql介绍(关系型数据库),关系型与非关系型数据库,数据库与文件的对应关系,mysql启动与连接,修改mysql配置信息

关系型数据库与非关系型数据库的简介对比说明

Mongodb之简介