2014-10-07 58 views
0

之前已经讨论过这个问题,但我还没有遇到明确的答案,它只是粗略地描述为火和水,并留在那里(来自我的研究)。与非关系(MySQL和MongoDB)的混合关系

关系和无关系数据库是非常不同的,但它们都拉数据,对于我的项目,我打算使用无关系数据库,但是这将安装在许多地方,有些只能访问MySQL(后来移动)。

那么有可能迫使MySQL进入一种无关系模式?我已经使用了一种模仿它的模式,但它仍然保留着迄今为止我无法克服的关系数据库方面(过分依赖于ID等等,导致语法/数据结构混乱)。

那么有没有一个魔术图书馆会做到这一点?

这里是我的数据库架构的一个大概的轮廓:

1台是“元”及其包含的ID,类型和日期等一起,共同搜索是普遍的基本领域。

1个包含“数据”的表,每个“列”有多行。它不能通过一个连接来完成,所以它的两个查询来获取数据。

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 /日期什么的,还需要PHP占用了大量松弛的顺序和这样的。不是我真正担心的,而是要做一个真正的搜索,它需要转储整个数据库,并通过它咀嚼.....

什么样的MySQL模式(或概念)可以最好地复制无关系模型(并仍然合理地处理搜索)?

+0

如果存在这样一个魔术开关,那么除了MySQL – 2014-10-07 21:54:22

+0

之外不需要任何数据库,如果您愿意,可以使用mysql作为哑数据存储系统。没有什么东西需要你拥有多个表,外键等......如果你愿意,你可以有一个单一的字段/单个表/单个模式,将整个系统存储为一个不透明的blob。但是接下来的问题就变成了“为什么还要用数据库开始呢?” – 2014-10-07 21:55:53

+0

它或多或少的向后兼容性。我使用的数据是非常动态的,它几乎不可能正确使用mysql。我真的被困在一块石头和一个坚硬的地方之间......这个......大声笑。我打算缓存它,但我也明白,它的性能可能也不足。 – 2014-10-07 21:58:16

回答

2

首先,没有魔法这样的东西。

您已重新设计了Entity-Attribute-Value设计。这是一个非关系设计。 I've written about this before,但简而言之:您最终必须在应用程序代码中实现您在RDBMS中认为理所当然的许多功能,如约束和数据类型。

这是关系到Inner-Platform Effect的概念:

的内部平台的影响是设计一个系统是如此定制的,它最终成为平台的它被设计为一个贫穷的副本的结果。这种动态内部平台的“定制”变得如此复杂,只有程序员(而不是最终用户)才能修改它。

如果这是您想花时间去做的工作类型,那就去做吧。

我的首选是将MySQL用于关系数据,并将非关系数据存储用于非关系数据。可以从同一应用程序访问这两个数据库。

它只是粗略地描述为火和水,并留在那里(从我的研究)。

我觉得它更像火和棉花糖。如果你知道自己在做什么,那么你就可以成为世界上最好的享受之一。或者你最终可能会拿着一根被烧焦,粘糊糊的棒子。

+0

非常好的解释和参考。 – 2014-10-07 23:04:46