用MySQL数据库来支持Schemaless的数据库存储方案

来源:未知 责任编辑:责任编辑 发表时间:2014-01-20 07:55 点击:

懒人居- Coding for fun要生猛的面对生活

用MySQL数据库来支持Schemaless的数据库存储方案

在PyCon上有童鞋提供了一个类似概念的分享,不过不大适合一般类型的互联网项目,感觉有点过于另类。不过我实现这个方案是在看到PyCon的分享之前。算是同样的诉求不同的实现方式吧。且我这里只是实现了一个数据访问的组件而不是Server。

 

首先本文的方法来自FriendFeed分享的如何使用MySQL数据库的分享。简而言之就是把Python对象直接dumps后zip压缩存储在MySQL一个字段里。这样不就Schemaless了么?存什么数据类型,类什么结构,MySQL都不需要知道,加个属性什么的都不需要修改数据库表结构,对于业务快速变更、快速增长的互联网业务来说再合适不过了。访问对象直接通过主键查询,快速直接。but,查询怎么办?有的童鞋可能会问。OK,查询这事得分两说,如果是简单的检索,可以通过建索引表的方式来解决,或者呢用外部的索引,比如lucent,还能全文检索哦。现在而今眼目下我实现了索引表索引的方式,因为外部的索引方式比较千奇百怪,所以如果需要可以根据具体情况自己来写一个,反正实现相应的几个方法就行。

 

直接上一个例子来说明。假设要实现一个blog,需要存blog的信息,先定义一个blog的模型类(需要import什么大家自动脑补)

 

1 class Blog(DynamicBase):2     title=Column(unicode,max_length=200)3     content=Column(unicode)4     post_date=Column(datetime.datetime,db_index=True)5     auther=FkColumn(User)6     class Meta:7         table_name="blogs"8         connection=connections[DB]复制代码

这个connection是因为我还没想好如何能无缝结合到Django中又能兼顾脱离Django独立使用的暂时措施,完成版会去掉

 

如果在使用django的话只需要python manage.py shell 然后Blog.objects.create_table()

 

这个时候会自动创建模型定义的表和索引表

 

数据表blogs:

 

CREATE TABLE `blogs` (

`id` int(11) NOT NULL,

`object` varbinary(20000) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 同时建立两个索引表

 

CREATE TABLE `blog_idx_post_date` (

`id` int(10) unsigned NOT NULL,

`post_date` DATETIME NOT NULL,

PRIMARY KEY (`id`),

INDEX `idx_blogs_by_post_date` (`post_date`) USING BTREE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

 

CREATE TABLE `blog_idx_auther` (

`id` int(10) unsigned NOT NULL,

`auther` INT NOT NULL,

PRIMARY KEY (`id`),

INDEX `idx_blogs_by_auther` (`auther`) USING BTREE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

 

这个时候,可以通过Blog.objects.create(title=u"标题",content=u"内容",post_date=datetime.datetime.now(),auther=user) 或者Blog.objects.create(title=u"标题",content=u"内容",post_date=datetime.datetime.now(),auther=user.id)

 

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • mysql-mmm
  • mysqldump命令——MySQL数据库备份还原
  • Oracle数据导入MySQL的快捷工具:MySQL Migration Toolkit
  • 简简单单储存过程——循环一个select结果集
  • MySQL数据库十大优化技巧
  • Mysql安装笔记
  • Mysql主主复制架构配置
  • Mysql的Procedure 参数为NULL问题分析
  • MySQL Stmt预处理提高效率问题的小研究
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1