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

转载 2013年12月01日 21:11:21

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/

相关文章推荐

UnitedStack有云UOS云平台上线对象存储功能 让非结构化存储更安全快捷

2015年10月27日至30日,OpenStack领域的盛会OpenStack Summit在东京盛大举办。中国云计算领域第一个提供公有云和托管私有云区域节点完全一致的高可靠云服务的云公司United...

Oracle 非结构化数据的存储:Secure File

SecureFile 1.       存非结构化数据:以LOB字段存在DB中,在DB中保存指向外部OS文件的引用。 2.       基于文件存储非结构化...

非结构化数据的存储与查询

当今信息化时代充斥着大量的数据。海量数据存储是一个必然的趋势。然而数据如何的存储和查询,尤其是当今非结构化数据的快速增长,对其数据的存储,处理,查询。使得如今的 关系数据库存储带来了巨大的挑战。分...

非结构化数据存储与查询小结

暑假老师要写篇海量非结构化数据的存储和查询方面的综述,下面是自己参考几篇论文写得。写得不好,有的仅个人理解,有什么问题,希望指出.         当今信息化时代充斥着大量的数据。海量数据存储是一个...

非结构化数据呼唤集群存储架构

非结构化数据呼唤集群存储架构   信息高速增长势不可挡。据IDC的报告显示,现在全球数据量每18个月就要翻一番,每年全球产生的数据量已经高达40EB(1EB=1000PB)。而这些疯狂增长的数据...

VIM语法高亮、VIM代码补全、VIM结构化视图功能的配置实现(1)

=========================================== 为了更加方便的学习和研究一个开源c++项目(当然linux环境下),特地花了一两周的时间研究vim及其插件的配置...

VIM语法高亮、VIM代码补全、VIM结构化视图功能的配置实现

VIM语法高亮、VIM代码补全、VIM结构化视图功能的配置实现 =========================================== 【简介】       为了更加方便的学...
  • YHM07
  • YHM07
  • 2014-11-15 16:38
  • 796
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)