Php 混合关系与非关系(MySQL和MongoDB)

Php 混合关系与非关系(MySQL和MongoDB),php,mysql,sql,mongodb,database,Php,Mysql,Sql,Mongodb,Database,这之前已经被讨论过了,但我还没有找到一个明确的答案,它只是粗略地描述为火和水,就这样(根据我的研究) 关系型数据库和非关系型数据库有很大的不同,但它们都会提取数据,对于我的项目,我计划使用一个非关系型数据库,但是它将安装在许多地方,有些地方只能访问MySQL(后来被移动) 那么,有可能强制MySQL进入一种非关系模式吗?我使用了一种类似于它的模式,但它仍然保留着关系数据库的一些方面,而到目前为止我还无法克服这些方面(过度依赖于ID之类的东西,导致语法/数据结构混乱) 那么有没有一个神奇的图书馆可

这之前已经被讨论过了,但我还没有找到一个明确的答案,它只是粗略地描述为火和水,就这样(根据我的研究)

关系型数据库和非关系型数据库有很大的不同,但它们都会提取数据,对于我的项目,我计划使用一个非关系型数据库,但是它将安装在许多地方,有些地方只能访问MySQL(后来被移动)

那么,有可能强制MySQL进入一种非关系模式吗?我使用了一种类似于它的模式,但它仍然保留着关系数据库的一些方面,而到目前为止我还无法克服这些方面(过度依赖于ID之类的东西,导致语法/数据结构混乱)

那么有没有一个神奇的图书馆可以做到这一点

以下是我的数据库架构的大致概述:

1表是“meta”,它包含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模式(或概念)能够最好地复制一个非关系模型(并且仍然能够合理地处理搜索)?首先,没有魔法这样的东西

你重新设计了这个设计。这是一种非关系型设计,但简而言之:您最终不得不在应用程序代码中实现许多您认为在RDBMS中理所当然的特性,比如约束和数据类型

这与以下概念有关:

内部平台效应是将系统设计为可定制的结果,它最终会成为设计时使用的平台的拙劣复制品。这个动态内部平台的“定制”变得如此复杂,以至于只有程序员(而不是最终用户)能够修改它

如果这是你想花时间做的工作,那就去做吧

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

它只是粗略地描述为火和水,就这样(根据我的研究)


我觉得它更像火和棉花糖。如果你知道自己在做什么,你可以做世界上最好的食物之一。或者,你可能会拿着一根被烧焦、粘糊糊的棍子。

如果存在这样一个神奇的开关,那么除了mysql之外,就不需要任何数据库了。如果你愿意,你可以使用mysql作为哑数据存储系统。没有任何东西需要您拥有多个表、外键等。。。如果您选择的话,您可以有一个将整个系统存储为不透明blob的单字段/单表/单模式。但接下来的问题是“为什么还要从数据库开始呢?”这或多或少是为了向后兼容。我使用的数据是非常动态的,几乎不可能正确地使用mysql。我真的被困在岩石和坚硬的地方之间。。。。。哈哈。我计划缓存它,我知道它可能也缺乏性能。你可以在一列中存储JSON或其他序列化数据。这样做有缺点,但性能好处可能是好的。SQL补充道:“也许一个好的方法是发布完整的模式(目前有点模糊),这样人们就可以了解您的实际需要。”。我离开JSON的原因是为了搜索它(根据我的经验),您必须解析每一行,查看它并过滤出您需要的内容。把它放在一个记录中有助于加快这个过程。非常好的解释和参考。