一、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
}
  1. Tair实现乐观锁
    trylock(获取版本)–> transaction –> unlock(版本检查) — 正常—> version+1 commit— 异常—> rollback
  • 只要能获取版本,就认为trylock成功
  • 版本检查则更新version,一般是加1;否则,异常处理,version不变,并开启回滚
  • 多事务同时获得乐观锁时,unlock只能有一个成功,其余的都应该失败

version 初始化要大于1

  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操作相关推荐

  1. mysql InnoDB存储引擎的介绍

    mysql InnoDB存储引擎的介绍 概念 1.InnoDB是MySQL默认的存储引擎,如果需要其不支持的特性,则考虑使用其他存储发动机. 2.InnoDB采用MVCC支持高并发,实现四个标准隔离级 ...

  2. BitCask 持久化hash存储引擎 原理介绍

    文章目录 前言 引擎背景 引擎原理 1. 磁盘数据结构 2. 内存数据结构 3. 读流程 4. 数据合并 总结 前言 最近工作中部分项目中,对存储引擎的需求希望高性能的写.点查,并不需要Range.这 ...

  3. MySQL存储引擎的介绍

    数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎还可以获得特定的功能. ...

  4. innodb和my查询速度_吃透MySQL:MyISAM和InnoDB存储引擎详细介绍

    一,MySQL基本架构 MySQL基础架构可以分为两大类:Server层和存储引擎层. Server层: Server层涵盖了MySQL大部分核心业务功能,并且所有存储引擎的功能都在这一层实现. 存储 ...

  5. mysql的存储引擎详解_MySQL常见存储引擎详解

    通过执行show engines命令查看MySQL中支持哪些存储引擎 MySQL存储引擎属性对比 设置表的存储引擎的方法 在my.cnf配置文件中设置default-storage-engine参数表 ...

  6. MySQL管理之 MyISAM和InnoDB存储引擎简单对比

    有 一.MyISAM引擎: 1.隔离事务界别: 由于myisam的隔离事务级别是串行.采用的是表级锁,不支持事物和全文索引.因此不适用在大并发,重负荷的生产系统上. 2.实例的崩溃恢复: 当系统宕机或 ...

  7. [Unity存档系统]简单介绍Unity常见存档系统二JSON以及使用方法

    学习目标: 如果你和我同样苦恼于游戏相关的数据怎么存储与读取,那么不妨看看这个up主有关Unity存档系统的教程.[Unity] 存档系统 Part 1 | PlayerPrefs | Unity初学 ...

  8. Drools基础篇-01-规则引擎简单介绍

    这一部分学习的时候是看的黑马博学谷的学习视频,记得一些笔记,笔者放在这里是为了方便观看,如有侵权,请联系删除. 注意:SpringBoot版本和Drools版本直接的兼容问题. Maven仓库: Dr ...

  9. mysql innodb 设置,Mysql5.5 InnoDB存储引擎简单设置

    环境为CentOS系统,1G内存,Mysql5.5.30. 在/etc/my.cnf内添加: skip-external-locking skip-name-resolve max_connectio ...

最新文章

  1. -bash: git: command not found
  2. 怎么学python-初学者如何学习Python?掌握这17个实用小技巧快速入门!
  3. 敏捷开发与中医理论系列之一:序言及为何中医教材都是千年古籍
  4. weex css单位,Weex系列(7) ——踩坑填坑的总总
  5. 多值参数-元组和字典的拆包
  6. java soap envelope_如何在SOAP请求中关闭Envelope和Body
  7. Spring Boot API 接口文档 Swagger 入门
  8. Qt文档阅读笔记-Qt Concurrent介绍及简单使用
  9. centos下php5.4.22连接mssql,IIS7.5配置php5.4.22链接sql2008(用PDO链接数据库)_PHP教程...
  10. Java中long和Long有什么区别(转)
  11. java中成绩转换_成绩转换
  12. 融易宝项目之EasyExcel和数据字典的使用
  13. AutoCAD2014 无法通过快捷方式启动
  14. 内存卡数据被格式化如何恢复?
  15. 讲解MySQL8.0备份与还原工具(mysqlbackup)
  16. 论文阅读|《用强化学习求解带插单的动态FJSP》
  17. Linux 使用系统调用进行文件读写
  18. pd虚拟机安装Windows后如何退出(进入)融合模式
  19. 三星支付存在漏洞可导致黑客进行交易劫持
  20. 勋章菊的养殖方法和注意事项

热门文章

  1. 【Books系列】之第四本书:大冰之《你坏》读书笔记
  2. ArcGIS操作Excel文件没有注册类解决办法
  3. 关于电梯运行逻辑原理的思路分析
  4. STM32H7 BDMA应用示例
  5. 计算机考试登记表是准考证嘛
  6. 绘制交互流程图的方法
  7. navicat 使用ssh连接腾讯云主机mysql数据库(保姆级教程)
  8. podman 开机自启
  9. php保存word没背景图,为什么word文档明明保存了却不见了
  10. py实现高斯列选主元消元法