关闭

通过MariaDB的dynamic column功能实现非结构化存储

1556人阅读 评论(0) 收藏 举报
分类:

MariaDB与MySQL的关系十分微妙,可以说本是同根生,相煎何太急。但通过这几年的发展,已经可以比较清晰的看出两者发展方向的不同。MariaDB由于Monty的存在,毫无疑问上层的开发能力优势明显。比如困扰社区多年的组提交,虽然Percona,Facebook都给出了解决方案,但最终还是MariaDB的方案胜出。MySQL由于之前Oracle早先已经收购InnoDB存储引擎,因此InnoDB存储引擎的开发具有绝对的发言权。上层与存储引擎的博弈,谁会胜出现在还很难说,但是MariaDB对于MySQL数据库本身做了很多的创新,其中dynamic column功能是我最为欣赏的。

由于MySQL数据库本身在进行ALTER TABLE时开销较大,需要锁表,因此若一张表在建立完成后,预料其还会增加列时,通常的做法是会预先定义很多的空列,待要增加列时,直接使用即可。但是,用户可能无法得知之后添加列类的类型,是INT,还是VARCHAR?例如在网游中,玩家用户有着无数的属性,这时应用通常会采用非结构化存储而非关系数据库的表,比如MongoDB等NoSQL系统。

MariaDB的dynamic column的优势是可以在MySQL存储非结构化的数据,从而达到schema free的效果。看看Monty自己对dynamic column的介绍:
  • Dynamic Columns has been in MariaDB for a while already. This feature allows you to store a different set of columns for every row in a table. In that manner Dynamic Columns can be called NoSQL-like.
使用dynamic column仅需将列定义为BLOB类型,之后非结构化的存储都存放在这个列中,看下面的例子:

create table assets ( item_name varchar(32) primary key, -- A common attribute for all items dynamic_cols blob -- Dynamic columns will be stored here );

接着可以插入非结构化的数据,如:

insert into assets 
values ('MariaDB T-shirt', COLUMN_CREATE('color', 'blue', 'size', 'XL'));
insert into assets values 
('Thinkpad Laptop', COLUMN_CREATE('color', 'black', 'price', 500));

可以发现第1条记录的dynamic column中存放的是color和size的属性,第2条记录存放的是color和price。这么简单就能在MySQL数据库中实现非结构化的存储!!!COLUM_CREATE是dynamic column的函数,其他函数还有COLUMN_ADD,COLUMN_GET,COLUMN_LIST等,具体可见MariaDB的官方用户手册。
此外,MariaDB还支持以json格式输出dynamic column中的内容,这对某些应用可以会非常有帮助:

MariaDB [test]>select item_name, COLUMN_JSON(dynamic_cols) from assets; +-----------------+----------------------------------------+ | item_name | COLUMN_JSON(dynamic_cols) | +-----------------+----------------------------------------+ | MariaDB T-shirt | {"size":"XL","color":"blue"} | | Thinkpad Laptop | {"color":"black","warranty":"3 years"} | +-----------------+----------------------------------------+ 2 rows in set (0.00 sec)


MariaDB 5.3就开始支持dynamic column,但是仅支持将数字作为列名。MariaDB 10.0.1开始可以使用数字或字符串作为列名,此外还增加了COLUMN_JSON和COLUMN_CHECK函数。这意味着更为直观与便捷的非结构化存储。真心期待MariaDB 10 GA版本的发布,或许世界会因此而有所不同。
——EOF——
from :http://insidemysql.blog.163.com/blog/static/202834042201372143620647/

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:375016次
    • 积分:3566
    • 等级:
    • 排名:第9214名
    • 原创:47篇
    • 转载:213篇
    • 译文:3篇
    • 评论:5条
    最新评论