Tair存储引擎简单介绍以及常见API操作
一、Tair存储引擎
Tair的存储引擎有一个抽象层(storage_manager),只要实现存储引擎接口,便可以替换Tair的底层存储引擎。
可插拔存储引擎—类似MySQL
Tair默认包含四种存储引擎:mdb、fdb、kdb和ldb
1、mdb
数据存储:Memcached
高效缓存存储
使用share memory ,重启不会数据丢失
支持K-V存储、prefix操作
适用于:String缓存使用 (json)、大访问少量的临时数据存储、Session分离
2、fdb
数据存储:FireBird
高效的持久化SQL存储
索引文件和数据文件分离------>mysql MyISam
使用Tree的方式根据key的hash值索引数据 B tree
索引文件在内存中
适用于:快速访问较小的数据
3、kdb
数据存储:Kyoto Cabinet
Cabinet开发的KV的持久化存储
简单的包含记录的数据文件
存储形式为hash表或B+Tree
适用于:简单临时存储
4、ldb
数据存储:LevelDB
是Google开发的高性能持久化KV存储
可内嵌mdb缓存 mdb+ldb
支持kv、prefix
支持批量操作
适用于:大数据量的存取(交易快照)、高频度的更新(库存)、离线大批量数据导入
5、rdb
数据存储:Redis
高效缓存存储
多种数据结构和计算
适用于:复杂数据结构存储、商品属性、粉丝列表、商品评论、消息队列
阿里使用:mdb、rdb、ldb
mdb的存储结构(Memcached)
- mem_pool
用于共享内存管理,将内存分为若干个page
page个数根据slab_mem_size设置,单位为MB
单个DataServer最多使用64G内存 - mem_cache
用于管理slab,存放slab_manager列表
slab_manager管理item(数据块)
slab个数为100,一个slab可存储800kb - cache_hash_map
用于存储hash表,根据key进行hash对应item数据
hash冲突,产生链表 - mdb_area_stat
用于维护area(namespace)状态,记录了该area的数据链表和数据量限制(tablespace)
二、Tair相应API
1、key/value常见操作API
2、version
Tair中的每个数据都包含版本号,版本号在每次更新后都会递增。这个特性有助于防止由于数据的并发更新导致的问题,类似于乐观锁
比如,系统有一个value为“a”,A和B同时get到这个value。
A执行操作改为"b"
B执行操作改为"c"
如果不控制,无论A和B谁先更新成功,它的更新都会被后到的更新覆盖。
使用version解决
第一次put version为1
get version为1
A修改成功后 version增加1
B修改时本身version为1,小于服务器版本2
所以B修改不成功
在put时,version传0 可强制修改
struct mdb_item{uint64_t item_id;.....uint16_t version
}
- Tair实现乐观锁
trylock(获取版本)–> transaction –> unlock(版本检查) — 正常—> version+1 commit— 异常—> rollback
- 只要能获取版本,就认为trylock成功
- 版本检查则更新version,一般是加1;否则,异常处理,version不变,并开启回滚
- 多事务同时获得乐观锁时,unlock只能有一个成功,其余的都应该失败
version 初始化要大于1
- Tair实现分布式锁
利用 Tair 的 version 特性可以实现分布式锁,由于 LDB 具有持久化功能,当服务有出现宕机的情况,也不会因此出现锁丢失或者锁不可释放的情况。
如果KEY不存在的话,传入一个固定的初始化VERSION(需要大于1),Tair会在保存这个缓存的同时设置这个缓存的VERSION为你传入的 VERSION+1
KEY如果已经存在,Tair会校验你传入的VERSION是否等于现在这个缓存的VERSION,如果相等则允许修改,否则将失败。
//获得锁
public boolean lock(String lockKey) {//10 :version expiretime : 过期时间 秒ResultCode code = defaultTairManager.put(lockKey, defaultVlaue, 5,expiretime);if (ResultCode.SUCCESS.equals(code))return true;elsereturn false;
}
//释放锁
public Boolean unlock(String lockKey){ResultCode code = defaultTairManager.delete(lockKey);return ResultCode.SUCCESS.equals(code);
}
3、Java Client
pom.xml
<!-- https://mvnrepository.com/artifact/com.taobao.tair/tair-client -->
<dependency><groupId>com.taobao.tair</groupId><artifactId>tair-client</artifactId><version>2.3.5</version>
</dependency>
demo
DefaultTairManager defaultTairManager = new DefaultTairManager();
List<String> cs = new ArrayList<String>();
cs.add("192.168.127.132:5198");
defaultTairManager.setConfigServerList(cs);
defaultTairManager.setGroupName("group_1");
defaultTairManager.init();
defaultTairManager.put(0,"name:001","zhangfei");
Result<DataEntry> value= defaultTairManager.get(0,"name:001");
System.out.println(value);
//设置版本0 强制更新 过期时间2秒
defaultTairManager.put(0,"name:002","zhaoy",0,2);
Result<DataEntry> value2= defaultTairManager.get(0,"name:002");
System.out.println(value2);
Tair
机房、负载均衡、数据迁移、不停止服务
更好的可用性和负载均衡
Redis
多数据结构处理、计算
Tair+Redis
Tair存储引擎简单介绍以及常见API操作相关推荐
- mysql InnoDB存储引擎的介绍
mysql InnoDB存储引擎的介绍 概念 1.InnoDB是MySQL默认的存储引擎,如果需要其不支持的特性,则考虑使用其他存储发动机. 2.InnoDB采用MVCC支持高并发,实现四个标准隔离级 ...
- BitCask 持久化hash存储引擎 原理介绍
文章目录 前言 引擎背景 引擎原理 1. 磁盘数据结构 2. 内存数据结构 3. 读流程 4. 数据合并 总结 前言 最近工作中部分项目中,对存储引擎的需求希望高性能的写.点查,并不需要Range.这 ...
- MySQL存储引擎的介绍
数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎还可以获得特定的功能. ...
- innodb和my查询速度_吃透MySQL:MyISAM和InnoDB存储引擎详细介绍
一,MySQL基本架构 MySQL基础架构可以分为两大类:Server层和存储引擎层. Server层: Server层涵盖了MySQL大部分核心业务功能,并且所有存储引擎的功能都在这一层实现. 存储 ...
- mysql的存储引擎详解_MySQL常见存储引擎详解
通过执行show engines命令查看MySQL中支持哪些存储引擎 MySQL存储引擎属性对比 设置表的存储引擎的方法 在my.cnf配置文件中设置default-storage-engine参数表 ...
- MySQL管理之 MyISAM和InnoDB存储引擎简单对比
有 一.MyISAM引擎: 1.隔离事务界别: 由于myisam的隔离事务级别是串行.采用的是表级锁,不支持事物和全文索引.因此不适用在大并发,重负荷的生产系统上. 2.实例的崩溃恢复: 当系统宕机或 ...
- [Unity存档系统]简单介绍Unity常见存档系统二JSON以及使用方法
学习目标: 如果你和我同样苦恼于游戏相关的数据怎么存储与读取,那么不妨看看这个up主有关Unity存档系统的教程.[Unity] 存档系统 Part 1 | PlayerPrefs | Unity初学 ...
- Drools基础篇-01-规则引擎简单介绍
这一部分学习的时候是看的黑马博学谷的学习视频,记得一些笔记,笔者放在这里是为了方便观看,如有侵权,请联系删除. 注意:SpringBoot版本和Drools版本直接的兼容问题. Maven仓库: Dr ...
- mysql innodb 设置,Mysql5.5 InnoDB存储引擎简单设置
环境为CentOS系统,1G内存,Mysql5.5.30. 在/etc/my.cnf内添加: skip-external-locking skip-name-resolve max_connectio ...
最新文章
- -bash: git: command not found
- 怎么学python-初学者如何学习Python?掌握这17个实用小技巧快速入门!
- 敏捷开发与中医理论系列之一:序言及为何中医教材都是千年古籍
- weex css单位,Weex系列(7) ——踩坑填坑的总总
- 多值参数-元组和字典的拆包
- java soap envelope_如何在SOAP请求中关闭Envelope和Body
- Spring Boot API 接口文档 Swagger 入门
- Qt文档阅读笔记-Qt Concurrent介绍及简单使用
- centos下php5.4.22连接mssql,IIS7.5配置php5.4.22链接sql2008(用PDO链接数据库)_PHP教程...
- Java中long和Long有什么区别(转)
- java中成绩转换_成绩转换
- 融易宝项目之EasyExcel和数据字典的使用
- AutoCAD2014 无法通过快捷方式启动
- 内存卡数据被格式化如何恢复?
- 讲解MySQL8.0备份与还原工具(mysqlbackup)
- 论文阅读|《用强化学习求解带插单的动态FJSP》
- Linux 使用系统调用进行文件读写
- pd虚拟机安装Windows后如何退出(进入)融合模式
- 三星支付存在漏洞可导致黑客进行交易劫持
- 勋章菊的养殖方法和注意事项