Merge pull request #241 from kfysck/actions Actions
Merge pull request #241 from kfysck/actions
Actions
DTC是一个分布式表级缓存系统,可为数据库提供热点数据缓存支持,减少数据库的访问压力。 DTC系统由以下组件组成:
单核CPU,单DTC实例环境下,可支持90,000 QPS的查询请求量; 在真实的分布式场景中,DTC可提供超过3,000,000 QPS的查询服务,命中率在99.9%以上,且平均响应时长在200微秒(μs)以内。
内存缓存模式又称CacheOnly模式,是数据仅存储在共享内存中,类似redis的功能,断电即丢失。但由于使用了共享内存,即使进程挂掉或者重启,在下次启动dtc之后,仍然能够访问到存储的数据。 客户端不需要特定的sdk,使用mysql-cli命令行便可访问dtc,并支持兼容类似mysql的增删改查命令。目前也已支持c++和python通过mysql的sdk访问。 目前支持的sdk有 | 语言 | SDK | 备注 | |——-|—————-|————-| | Shell | mysql5.7 | mysql的官方命令行,mysql8.0仍有bug正在解决,暂不支持 | | C++ | libmysqlclient | C++的常用库 | | Python | pymysql | python常用的mysql库,代码详见tests/test_dtcd_cache_only.py |
dtc.yaml文件是dtc的主要配置文件,这里可以配置缓存的表结构、内存大小、监听端口等。 下载解压缩安装包,新建dtc的配置文件dtc.yaml,文件位置在dtc/conf:
# # DTC configure file. v2 # Cache Only Test cases. # props: log.level: debug listener.port.dtc: 20015 shm.mem.size: 100 #MB primary: db: dtc table: &table opensource cache: field: - {name: &key uid, type: signed, size: 4} - {name: name, type: string, size: 50} - {name: city, type: string, size: 50} - {name: sex, type: signed, size: 4} - {name: age, type: signed, size: 4}
配置字段解释:
此配置文件是日志的配置文件,依赖于log4cplus组件,配置和log4cplus相同。可以配置日志的打印级别、日志的输出目录和名称等。
此文件配置dtc的编码形式,当前默认的配置文件中是default-character-set=utf8,显示utf8的编码,如需其他编码类型,可以自行修改。
启动脚本是dtc/bin/dtc.sh,参数为stop | start | restart。 启动进程执行: `./dtc.sh start` 停止进程执行: `./dtc.sh stop` 如果启动成功,可以在打印监听端口的时候,显示到监听端口。
如果启动成功,也可以在进程中看到两个dtcd服务。其中一个是父进程用于watchdog,另一个是真正的dtc业务
如果未执行成功,请到dtc/log中查看错误日志,并寻求解决办法。
使用mysql的客户端命令行便可连接访问dtc服务,如未安装,可以执行以下命令安装: ubuntu: `apt install mysql-client` 注意当前只支持mysql5.X版本,mysql8.0版本的客户端存在兼容性问题正在解决。 执行`mysql -h127.0.0.1 -P20016`即可像访问mysq一样,访问dtc服务: mysql -h和-P是mysql客户端的标准参数,分别制定ip地址和服务的port端口,如连接成功将如下图所示
关于兼容支持的SQL语法,详见操作手册。
可以像在mysq中插入数据一样执行insert的sql来插入缓存:
insert into opensource(uid, name, city, sex, age) values(2, "kfysck", "shanghai", 1, 18);
当前只支持上面这种插入的语法,当插入成功之后就会显示以插入一行数据
和mysql一样,通过select的sql来读取缓存中的数据:
select uid,name,city,sex,age from opensource where uid = 2;
同时也支持通配符*星号:
select * from opensource where uid = 2;
支持python常用的pymysql库,测试用例详见tests/test_dtcd_cache_only.py
import pymysql db = pymysql.connect(host='127.0.0.1', port=20015, user='test', password='test', database='test') cursor = db.cursor() sql = "insert into opensource(uid, name) values(1, 'hello')" cursor.execute(sql) db.commit() rowsaffected = cursor.rowcount print("affected rows: %s" % (rowsaffected)) cursor.close() db.close()
import pymysql db = pymysql.connect(host='127.0.0.1', port=20015, user='test', password='test', database='test') cursor = db.cursor() sql = "select uid, name from opensource where uid = 1" cursor.execute(sql) results = cursor.fetchall() for row in results: uid = row[0] name = row[1] print("uid=%s, name=%s" % (uid, name)) db.close()
在使用过程中遇到问题,或有好的意见建议,请提交Issues。 欢迎贡献代码,提交Pull Requests。
感谢京东副总裁王建宇博士给予项目的大力支持,多次参与指导提供建议和方向!
京东集团 版权所有 © Copyright 2021-2024 JD.com, Inc.
许可证遵循 Apache 2.0 协议. 更多细节请访问 LICENSE.
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
DTC - Distributed Table Cache 分布式表缓存
概述
DTC是一个分布式表级缓存系统,可为数据库提供热点数据缓存支持,减少数据库的访问压力。
DTC系统由以下组件组成:
特征
性能
场景一:内存缓存模式
内存缓存模式又称CacheOnly模式,是数据仅存储在共享内存中,类似redis的功能,断电即丢失。但由于使用了共享内存,即使进程挂掉或者重启,在下次启动dtc之后,仍然能够访问到存储的数据。 客户端不需要特定的sdk,使用mysql-cli命令行便可访问dtc,并支持兼容类似mysql的增删改查命令。目前也已支持c++和python通过mysql的sdk访问。 目前支持的sdk有 | 语言 | SDK | 备注 | |——-|—————-|————-| | Shell | mysql5.7 | mysql的官方命令行,mysql8.0仍有bug正在解决,暂不支持 | | C++ | libmysqlclient | C++的常用库 | | Python | pymysql | python常用的mysql库,代码详见tests/test_dtcd_cache_only.py |
1、配置文件
1.1 dtc.yaml
dtc.yaml文件是dtc的主要配置文件,这里可以配置缓存的表结构、内存大小、监听端口等。 下载解压缩安装包,新建dtc的配置文件dtc.yaml,文件位置在dtc/conf:
配置字段解释:
1.2 log4cplus.conf
1.3 my.conf
2、启动服务
3、连接DTC
关于兼容支持的SQL语法,详见操作手册。
4、操作DTC
4.1 mysql命令行
4.1.1 写缓存
可以像在mysq中插入数据一样执行insert的sql来插入缓存:
当前只支持上面这种插入的语法,当插入成功之后就会显示以插入一行数据
4.1.2 读缓存
同时也支持通配符*星号:
4.2 Python SDK
4.2.1 写缓存
4.2.2 读缓存
社区
在使用过程中遇到问题,或有好的意见建议,请提交Issues。
欢迎贡献代码,提交Pull Requests。
第三方依赖
项目成员
特别感谢
感谢京东副总裁王建宇博士给予项目的大力支持,多次参与指导提供建议和方向!
许可证
京东集团 版权所有 © Copyright 2021-2024 JD.com, Inc.
许可证遵循 Apache 2.0 协议. 更多细节请访问 LICENSE.