riak mysql_[Translate] 从SQL数据库迁移到Riak
例子
关系数据库: 创建表
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
author VARCHAR(30) NOT NULL,
title VARCHAR(50) NOT NULL,
body TEXT NOT NULL,
created DATE NOT NULL
);
关系数据库: 查询
SELECT * FROM posts WHERE id = 99;
关系数据库: 查询结果
id | author | title | body | created
----+------------+--------------------------------+----------------------------+------------
99 | John Daily | Riak Development Anti-Patterns | Writing an application ... | 2014-01-07
基本转换和存储过程如下
每一个表行被转换为一个JSON对象,包含除id字段外的所有其他字段.
id字段不会存储在Riak中的JSON对象中. 它不会作为对象的键. 而是把标题作为键, 30字符长度限制, 小写, 并且用-作为单词之间的连字符. 比如上面的例子把riak-development-anti-patterns作为键.
所有产生自posts表的JSON对象存储在名为posts的单个Riak桶当中.
键存在在Riak set中, 需要的时候, 使所有对象可以被一次查询出来.
把Table转换为List
下面, 我们使用psycopg2库来把表转换为列表
import psycopg2
connection = psycopg2.connection('dbname=blog_db')
cursor = connection.cursor()
用该游标(cursor)执行SELECT * FROM posts查询,然后使用fetchall函数从游标当中获取信息:
cursor.execute('SELECT * FROM posts')
table = cursor.fetchall()
table对象由一个Python元组列表构成, 如下:
[(1, 'John Doe', 'Post 1 title', 'Post body ...', datetime.date(2014, 1, 1)),
(2, 'Jane Doe', 'Post 2 title', 'Post body ...', datetime.date(2014, 1, 2)),
# more posts in the list
]
转换行为JSON对象
上面的代码把posts表中的每一行数据转换为包含5个元素的元组, 为了更好的进行转换, 我们把元组转换为能够在Riak中更好的处理的Python字典数据类型, 官方的Riak Python客户端能够自动地把Python字段转换为能够在Riak中存储的JSON对象. 一旦我们有了一个字典列表, 就可以直接在Riak中存储这些字典类型的数据.
下面通过Python代码把数据库中的数据转换为JSON格式:
import datetime
def convert_row_to_dict(row):
return {
'author': row[1],
'title': row[2],
'body': row[3],
'created': row[4].strftime('%m-%d-%Y')
}
产生如下的JSON数据:
{
'author': 'John Daily',
'title': 'Riak Development Anti-Patterns',
'body': 'Writing an application ...',
'created': '01-07-2014'
}
存储行对象
现在使用store_row_in_riak把posts表中的数据存储到Riak中:
用博客的标题来构造键, 获取签名30字符, 字符全部转换为小写, 并用-替换空格.
每行将被转换为一个正确的Riak对象,并存储
下面是这个函数的实现:
bucket = client.bucket('posts')
def store_row_in_riak(row):
key = row[2][0:29].lower().replace(' ', '-')
obj = RiakObject(client, bucket, key)
obj.content_type = 'application/json'
obj.data = convert_row_to_dict(row)
obj.store()
上面我们在一个Riak set存储所有对象的键, 以帮助我们在将来能够查询这些对象. 我们修改上的store_row_in_riak函数添加每一个键到一个set(集合):
from riak.datatypes import Set
objects_bucket = client.bucket('posts')
key_set = Set(client.bucket_type('sets').bucket('key_sets'), 'posts')
def store_row_in_riak(row):
key = row[0]
obj = RiakObject(client, bucket, key)
obj.content_type = 'application/json'
obj.data = convert_row_to_dict(row)
obj.store()
现在,我们编写一个迭代器用于存储所有的行:
# Using our "table" object from above:
for row in table:
store_row_in_riak(row)
一旦所有对象存储到Riak, 我们可以执行正常的键/值操作来一个一个地获取. 下面是一个使用Riak HTTP API的例子:
curl http://localhost:8098/buckets/posts/keys/99
这将返回一个博客(Blog)对象:
{
"author": "John Daily",
"title": "Riak Development Anti-Patterns",
"body": "Writing an application ...",
"created": "01-07-2014"
}
需要的时候, 我们也可以一次获取所有这些对象. 前面我们在Raik set中存储了所有对象的键. 我们可以编写一个函数从set中获取所有对象的key, 以及和这些key相关的所有对象:
from riak.datatypes import Set
set_bucket = client.bucket_type('sets').bucket('key_sets')
posts_bucket = client.bucket('posts')
def fetch_all_objects(table_name):
keys = Set(client, bucket, table_name)
for key in keys:
return posts_bucket.get(key)
fetch_all_objects('posts')
这回返回之前存储的Python字典的完整列表.
使用二级索引
添加一个关键字字段(keywords), 来描述一篇博客的关键字列表:
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
author VARCHAR(30) NOT NULL,
title VARCHAR(50) NOT NULL,
body TEXT NOT NULL,
created DATE NOT NULL,
keywords TEXT[] NOT NULL
);
插入数据:
INSERT INTO posts (author, title, body, created, keywords) VALUES
('Basho', 'Moving from MySQL to Riak', 'Traditional database architectures...',
current_date, '{"mysql","riak","migration","rdbms"}');
为没一个博客的关键字列表添加一个二级索引. 下面我们编写一个函数对每一个关键字附加一个二级索引.
def add_keyword_2i_to_object(obj, keywords):
for keywork in keywords:
obj.add_index('keywords_bin', keyword)
然后我们可以插入该函数到store_row_in_riak函数中:
bucket = client.bucket('posts')
def store_row_in_riak(row):
obj = RiakObject(client, bucket, row[0])
obj.content_type = 'application/json'
obj.data = convert_row_to_dict(row)
add_keyword_2i_to_object(obj, row[5])
obj.store()
现在我们可以基于一篇博客的关键字来查询:
bucket = client.bucket('posts')
def fetch_posts_by_keyword(keyword):
for key in bucket.get_index('keywords_bin', keyword):
return bucket.get(key)
该函数会返回所有包含特定关键字的博客列表.
riak mysql_[Translate] 从SQL数据库迁移到Riak相关推荐
- 一起来玩AZURE SQL(三)AZURE SQL 数据库迁移
如何将本地数据库迁移到Azure SQL,一般来说分为几部分工作, 兼容性测试:验证数据库是否与 SQL 数据库 V12 兼容. 解决兼容性问题(如果有):如果验证失败,必须先解决验证错误. 运行迁移 ...
- aws 数据库迁移_将您的sql数据库迁移到云AWS和Azure
aws 数据库迁移 When migrating your SQL databases to the cloud you need to make your choice carefully. Mig ...
- 中控考勤机 本地mysql_中控考勤机SQL数据库建立方法及常用操作
释放双眼,带上耳机,听听看~! 首先客户电脑上需要安装sqlserver数据库(2000或者是2005版本) 安装方法就不在这里介绍,下面说一下数据库的建立办法.(以2005版本为例) 1.打开数据库 ...
- 从SQL Server到多数据库,微软数据库迁移全攻略
据了解,截止到 2022,云迁移市场规模将达到 1290 亿美元,云迁移服务市场的利润率达 26.7%.数据库作为企业迁移上云的关键环节,自然成为了各大云厂商关注的重点,除了提供各种各样的云端数据库, ...
- sql azure 语法_如何将内部SQL Server数据库迁移到Azure
sql azure 语法 Lately, database administrators often hear the question "have you tried Azure?&quo ...
- 应用程序的数据库从Sql Server迁移到Oracle
应用程序的数据库从Sql Server迁移到Oracle 迁移案例一:数据库: Sql Server 2008到Oracle 9i 工具: Sybase PowerDesiner 12 试用版, PL ...
- h2 迁移到 mysql_[saiku] 将saiku自带的H2嵌入式数据库迁移到本地mysql数据库
saiku数据库的表和用户默认创建是在启动项目的时候,通过初始化 saiku-beans.xml 中的 h2database 这个 bean 执行org.saiku.service.Database类 ...
- 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化
2010-01-12 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化 文章分类:数据库 SqlServer 2k转换为Oracle 10g 列名 SqlServer数 ...
- go 获得 mysql 实际运行 SQL,Golang实践录:一个数据库迁移的代码记录
实现一个数据库迁移的案子.有些知识点值得记录. 技术框架 github.com/go-xorm/xorm:数据库操作 github.com/denisenkom/go-mssqldb:sqlserve ...
最新文章
- 详细讲解SQL Server索引的性能问题
- 纪中模拟赛——接苹果
- 如何以及为什么序列化Lambda
- 前端学习(1971)vue之电商管理系统电商系统之完成参数的添加操作
- html坐标绘制路径,canvas学习笔记之绘制简单路径
- 13商软 《软件工程》课程设计
- 12个很棒的Pandas和NumPy函数,让python数据分析事半功倍
- js 阻止冒泡事件和默认事件
- java skip_Java LongStream skip()用法及代码示例
- saltstack远程操作WINDOWS的POWERSHELL脚本
- 洛谷P1238 走迷宫
- matlab 单输入单输出线性时不变系统,试验线性时不变系统的时域分析及MATLAB实现.DOC...
- 计算机成绩统计优秀率,高校学生考试成绩的数据分析模式与可视化研究
- 620集成显卡和mx250,残血还是满血?一招看清MX250显卡真面目
- 2015年国际数学奥林匹克(IMO)试题
- java常用设计模式11—适配器模式
- 安卓进阶之android系统架构
- 法院判了!耿美玉起诉饶毅名誉侵权,驳回请求!但对饶毅方也应给予批评......
- android 扫码枪 字符数少掉,BarTender条码字符数莫名变少是怎么回事?
- 最全的厚黑学…教你怎样混社会