程序员的专利梦-第二部分

简要背景:我的上一个笔记描述了一种存储和检索数据的方法,您可以在该方法上构建应用程序设计器-这是现代开发平台的替代方案,但无需编程。 众所周知,这项发明可能会改变整个IT领域。


我进行了专利检索,并公布了结果,以确保没有任何建筑对应物。 然后,他获得了专利,并发表了一篇带说明的文章,其中包含有关容量,可伸缩性,速度和其他方面的一些大胆的评论。


当然,本文提出了许多需要单独解决的问题:与现有解决方案的区别以及对性能和构建数据库查询计划的比较分析。 还要回答这个问题:这是什么一回事,为什么呢?




由于该主题使许多人痛苦不堪,并且所要求的利益非常雄心勃勃,因此评论相当苛刻。 原因是可以理解的-在文章中,每个人都立即看到“ EAV”,认真的人仍在写“ EAV”,而性能问题通常是无法解决的。 正如我在评论中所获悉的那样,EAV有很多缺点,这是众所周知的,任何声称最终解决EAV问题的人都必须慷慨解囊才能发挥作用。


只有一个微妙之处:这篇文章没有介绍EAV


最受欢迎的问题是:“这与EAV,KV,Magento ...有何不同?”。


似乎差异在于所列出的属性不适合的所有方面:


  1. 结构-表中有5列和3个索引
  2. 采样方法-一张表描述数据类型及其关系(元数据)和数据本身

但是这样的答案并不适合许多读者,因此我将尝试更详细地解释。


所描述的结构使用由ID属性补充的EAV目录,因为任何属性也是一个独立的实体,可以具有自己的属性,并且可以用作参考值。 也就是说,该结构不仅打算用作EAV引用,而且为什么实际上我不能称其为EAV。


最重要的是,EAV不能成为一个自给自足的解决方案,它仅仅是指南,也是系统的组成部分之一。 我说的是一个完整的,自给自足的解决方案,它不需要任何额外的东西即可创建结构,数据和管理它。


为了说明该解决方案与Datomic,Magento以及数以万计的其他解决方案和产品有何不同,您将需要对它们进行数万次的比较。 因此,我将冒险提出一种简单的技术,通过该技术,您可以在几分钟之内与任何系统进行比较,并找出差异(如果有)。



对于所比较的系统,有必要验证是否满足以下条件:


1.所有数据都存储在一个表中(另请参阅第3节),其中至少包含以下字段:ID,Parent ID,Type ID,Value

2.对于该表,至少构造以下索引:ID; 类型ID +值; 家长ID +类型ID。

3.可以有几个表,但是它们都包含项1和索引的最小结构,不同之处在于“值”字段的类型

4.该表包含对数据类型的描述。

5.该表包含对数据类型的详细描述(来自其中描述的类型集)

6.该表包含引用其类型的数据对象(来自表中描述的类型集合)

7.该表包含对象的详细信息以及指向父对象和类型的链接

8.选择对象时必须指明对象的类型

9.对象的详细信息选择必须带有父级和类型的指示

10.根据对象的详细信息选择对象时,必须指明详细信息的类型

11. (可选)通过包含作为链接对象ID类型的详细信息来连接对象

如果满足所有先决条件,那么您的系统将属于此处讨论的注释的描述。



随着容量的增加,更重要的问题使人们对系统性能的陈述产生了疑问。


为了进行比较测试,制作了两个相同的数据库,其中一个建立在关系数据库的常用表中,另一个使用声明的方法。 以下是两个带有查询文本,时间测量和执行计划分析的数据库的测试结果。


在上一篇文章的评论中,提出了一个简单的相关数据结构,适合于测试。 我以此为依据:这是从随机数据中生成的1,048,552本书的列表,其中包括142,654位作者。


该结构如下所示(单击查看)
CREATE TABLE `author` (
  `id` int(11) NOT NULL,
  `author` varchar(128) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `books` (
  `id` int(8) NOT NULL,
  `name` varchar(256) NOT NULL,
  `author` int(8) NOT NULL,
  `pages` int(4) NOT NULL,
  `year` int(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `author`
  ADD PRIMARY KEY (`id`),
  ADD KEY `author` (`author`);

ALTER TABLE `books`
  ADD PRIMARY KEY (`id`),
  ADD KEY `name` (`name`(255)),
  ADD KEY `author` (`author`);

ALTER TABLE `books`
  ADD CONSTRAINT `books_ibfk_1` FOREIGN KEY (`author`) REFERENCES `author` (`id`);

:



: 1 @2.4GHz, 1GB RAM, SSD.


207 289 .








, , .


: , . .


:


SELECT author.author, books.name, books.pages, books.year 
FROM books, author 
WHERE author.author LIKE '%aro%' AND books.author=author.id 
LIMIT 1000

( ):



«aro», 465 .


193 :



:



266 :



, 266 6 ( , - , ). 264 .


:


SELECT a225.val v1_225,a217.val v2_217,a223.val v3_217,a219.val v4_217
FROM test a225
 LEFT JOIN (test r217 JOIN test a217 USE INDEX (PRIMARY)) ON r217.up=a217.id AND a225.id=r217.t AND a217.t=217
 LEFT JOIN test a223 ON a223.up=a217.id AND a223.t=223
 LEFT JOIN test a219 ON a219.up=a217.id AND a219.t=219
WHERE a225.up!=0 AND a225.t=225 AND a225.val LIKE '%aro%'
LIMIT 1000

:



, , «», , , .


, , ( ).


0,19270,26431,37
0,11750,19651,67
0,07770,12681,63
0,11780,09830,83
0,06260,11311,81
: 1,46

, , . .


, :


, . . Magento, , .


,


, , .


:


SELECT author.author, books.name, books.pages, books.year 
FROM books, author 
WHERE author.author LIKE 'lac%' AND books.author=author.id 
LIMIT 1000

3.1 :



8.4 , 6 :



, , .


:



:




, ( ):


-
LIKE'Le%'100111,148,54,37
LIKE 'lac%'1083,16,01,94
LIKE 'Lean%'662,78,23,04
LIKE 'dac%'493,92,60,67
LIKE 'rac%'302,53,21,28
LIKE 'nac%'182,42,81,17
= ''63,91,50,38
= 'John'62,71,10,41
: 1,66

, , . , .



: . :


SELECT author.author, books.name, books.pages, books.year 
FROM books, author 
WHERE books.name LIKE '% %' AND books.author=author.id 
LIMIT 50

:



: 148 2490 . 17 !


, , , , . :



: 181 25 . , , 7 .


:


SELECT author.author, books.name, books.pages, books.year 
FROM books INNER JOIN author ON books.author=author.id
WHERE books.name LIKE '% %' 
LIMIT 50

: 62 47 . . , , . , .


, , , .


, , , . , .


: () . :


SELECT author.author, books.name, books.pages, books.year 
FROM books, author 
WHERE books.pages=150 AND books.year=1972 AND books.author=author.id 
LIMIT 50

:



, 30 :




, , . .


, : , .


: DDL DML .

Source: https://habr.com/ru/post/zh-CN414255/


All Articles