日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2025/7/14 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用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)

就能夠創建一個Blog的對象。這個時候blogs表和兩個索引表都會插入數據。不過blogs表中的object列是人類無法理解的火星文..........

通過id直接獲取對象 ?Blog.objects.get(1),根據索引獲取 ?Blog.objects.auther.query(auther=user.id) 或者??Blog.objects.auther.query(auther=user)

這個會生成SQL,SELECT `id` FROM ?`blog_idx_auther` WHERE `auther`=%s 然后取出match到對象的id列表,然后遍歷id列表,通過?Blog.objects.get(id)獲得的對象列表。

Blog.objects.get(id)的時候是有對象緩存的(現階段通過redis實現),所以經過測試,速度是靠譜的。而相對MangoDB來說,MySQL的數據存儲也更加靠譜一點,所以相比換現在而今眼目下還不怎么靠譜的mangodb來作為主存儲來說,基于MySQL的Schemaless方案還是相對靠譜的。

?

由于現在這個東西還是處于在項目中孵化的階段還沒有能夠達到可以獨立開源出來供大家娛樂的程度,所以請大家對這個方案多提意見建議咯,源代碼估計能夠在春節后達到能夠公布出來見人的階段?



總結

以上是生活随笔為你收集整理的用MySQL数据库来支持Schemaless的数据库存储方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区三区四区视频在线观看 | 欧美超逼视频 | 天天色综合久久 | 男男啪啪无遮挡 | bl动漫在线观看 | 日韩高清欧美 | 日韩人妻一区二区三区蜜桃 | 国产jizz18女人高潮 | a级片在线观看视频 | 黄色一区二区视频 | 波多野结衣办公室33分钟 | 懂爱av | 性欧美18一19内谢 | 国产日本一区二区 | 精品三级网站 | 黑人操日本| 九九在线观看高清免费 | 亚洲剧情在线 | 欧美暧暧视频 | 在线射 | 五十路母| 亚洲人人插 | 国产伦精品一区二区三区视频孕妇 | 精品福利视频一区二区 | 亚洲欧美日韩网站 | 特黄aaaaaaaaa毛片免 | jjzz日本视频 | a∨色狠狠一区二区三区 | 香蕉视频黄色片 | 黄色伊人 | 成人免费观看视频网站 | 黄色网页免费看 | 干成人网 | 婷婷去俺也去 | 人人干人人爽 | 日韩一区二区精品 | 视频一区二区三 | 在线观看成人黄色 | 欧美69式性猛交 | 在线播放成人 | 久久久老熟女一区二区三区91 | www.com日本 | 午夜精品一区二区三区三上悠亚 | 人人妻人人爽一区二区三区 | 国产伊人一区 | 91精品一区二区三区在线观看 | 久久久久久夜 | 国产精品中文无码 | 久久这里只有精品99 | 色偷偷免费| 中文字幕一区二区三区av | 天堂免费av| 粗大的内捧猛烈进出在线视频 | 538国产精品一区二区免费视频 | 毛片视频免费观看 | 自拍偷拍激情 | 日韩一页 | 99riav国产精品视频 | 欧美视频在线观看一区 | 国产对白羞辱绿帽vk | 欧美香蕉视频 | sese亚洲 | 闫嫩的18sex少妇hd | 一区二区三区在线免费观看视频 | 欧日韩一区二区三区 | 女教师三上悠亚ssni-152 | www.色播| 丁香花高清在线观看完整动漫 | 一本到在线 | 国产最新精品视频 | 久久久人妻无码一区二区 | 欧美熟妇精品黑人巨大一二三区 | 91黄漫| 国产乱国产乱 | 日本在线资源 | 婷婷黄色网 | 国产乱了高清露脸对白 | 亚洲自拍色图 | 欧美另类视频在线 | 在线观看h网站 | 999热精品视频| 在线观看国产三级 | 午夜福利视频一区二区 | 狠狠的干狠狠的操 | 国产精品一区二区自拍 | 清纯粉嫩极品夜夜嗨av | 91精品人妻一区二区三区四区 | 色一区二区三区四区 | 久久国产人妻一区二区免色戒电影 | 色妞综合| 欧美天天搞 | 一级伦理农村妇女愉情 | 精品欧美一区二区三区 | 国产吞精囗交免费视频 | www.国产高清| 亚洲av无码一区二区三区四区 | 五月天综合久久 | 91高清视频在线观看 | 在线男人天堂 |