ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

[入门必读]TcaplusDB数据库常见问题解决及诊断技巧集锦-数据库使用类(1)

2021-07-21 14:36:46  阅读:157  来源: 互联网

标签:常见问题 集锦 记录 版本号 数据库 TcaplusDB 错误码 tcapsvr key


随着信息技术的飞速发展,企业越来越依赖于信息化管理。尽管当前各种新的技术层出不穷,但大多数企业的业务数据依然主要存储在数据库中, 数据库是应用系统的基石,数据库中存储着大量的数据信息,数据库的稳定性、性能、扩展性,对业务的运营起着至关重要的作用。TcaplusDB作为腾讯自研的分布式NoSQL数据库,致力于帮助客户解决数据存储问题,为业务保驾护航。

以下为TcaplusDB常见入门问题(数据库使用类-1)


 

如何获取某个响应包错误码的含义?

推荐您在代码里采用在 gameserver 里调用函数TcapErrCode::TcapErrCodeInitTcapErrCode::GetErrStr函数来获取错误码,也可以本地搜索 TcaplusDB API 的头文件。

TcaplusDB 的乐观锁原理和使用方法?

举个抢火车票例子:

  1. 100个人去抢同一张火车票,此时火车票的记录版本号是10,100个人 get 时,都是记录版本号为10。然后这100个人拿着记录版本号为10来抢火车票。

  2. 100个人来对这张火车票进行写操作,因为写操作后记录版本号++,对于单个 key 的操作,tcapsvr 工作线程是排队的,第一个人抢到了火车票,此时火车票的记录版本号为11了,而剩余的99个人来抢时,拿着的记录版本号还是10。

  3. tcapsvr 在处理这99个人的写请求时,全部报错了,因为 tcapsvr 端的记录的版本号和请求里的版本号不一致导致的,并发时的原则:

    • N个请求,只是需要第一个请求成功,剩余的N - 1个请求失败,则采用版本保护规则。

    • N个请求,需要N个请求全部执行完毕,则不需要版本保护规则,TcaplusDB 这边对同一个 key 的操作。

排队执行调用函数SetCheckDataVersionPolicy,其值包括:

  • CHECKDATAVERSION_AUTOINCREASE:检测记录版本号,只有当该版本号与服务器端的版本号相同时,该版本号才会自增 。

  • NOCHECKDATAVERSION_OVERWRITE:不检测记录版本号,强制把客户端的记录版本号写入到服务器中。

  • NOCHECKDATAVERSION_AUTOINCREASE:不检测记录版本号,将服务器端的版本号自增。

  • 默认类型为CHECKDATAVERSION_AUTOINCREASE,推荐您使用。

list 表的使用场景及注意事项?

凡是存在1:N的使用场景,N < 1024时,优先考虑 list 表,例如存储玩家最近的100封邮件、最近的100场战斗记录等,list 表支持按照队头插入、队尾淘汰,队尾插入、队头淘汰,支持按照插入时间排序的 Top N 操作,单个 key 下的单元个数可以通过表变更修改大,因为需要兼容旧数据不能修改小。采用 listgetall 可以获取单个 key 下总的记录数目,推荐按照 offset 自己维护,limit 等于一定阈值的方式获取数据,listreplace、listdelete、listdeletebatch 时需要指定正确的 index。listaddafter 时需要指定单个 key 下的元素单元个数满时淘汰的规则,调用 SetListShiftFlag 函数设置所以 list 表有2个增加方向,2个获取方向,就是4种可能:

  1. A、B、C、D、E,按照 offset = 正数,limit = 2 拉取就是A、B,C、D,E。

  2. A、B、C、D、E,按照 offset = 负数,limit = 2 拉取就是D、E,B、C,A。

  3. E、D、C、B、A,按照 offset = 正数,limit = 2 拉取就是E、D,C、B,A。

  4. E、D、C、B、A,按照 offset = 负数,limit = 2 拉取就是B、A,D、C,E。

另外,调用GetRecordMatchCount可以获取记录的总数。

insert、update、replace 有什么区别?

insert 操作,当 key 不存在时会进行插入,当 key 存在时,会返回错误码:TcapErrCode::SVR_ERR_FAIL_RECORD_EXIST。 replace 操作,当 key 不存在会进行插入,当 key 存在时,如果采用了乐观锁,则根据乐观锁的结果执行不同的操作,成功则进行替换,失败则返回错误码:TcapErrCode::SVR_ERR_FAIL_INVALID_VERSION;如果没有采用乐观锁,直接替换。 update 操作,当 key 存在,如果采用了乐观锁,则根据乐观锁的结果执行不同的操作,成功则进行更新,失败则返回错误码:TcapErrCode::SVR_ERR_FAIL_INVALID_VERSION,如果没有采用乐观锁,直接更新;如果key不存在时,则返回错误码:TcapErrCode::TXHDB_ERR_RECORD_NOT_EXIST

如何获取某个表的记录数目?

TcaplusDB API 接口里有 count 命令字,如果采用 tcaplus_client 可以采用 count 表名命令获取表的记录数目。

TcaplusDB 支持遍历操作吗?

TcaplusDB 支持遍历操作,包括 generic 表、list 表的遍历操作,遍历时注意设置从 tcapsvr slave 上遍历数据(从 tcapsvr slave 上遍历数据,不会影响 tcapsvr master 对外提供服务),即接口:SetOnlyReadFromSlave(bool flag)


 

欢迎联系我们!

公众号:

TcaplusDB

社区:

https://tcaplusdb.tencent.com/ 一对一服务:

QQ:3426723433

购买链接:

https://cloud.tencent.com/product/tcaplusdb

标签:常见问题,集锦,记录,版本号,数据库,TcaplusDB,错误码,tcapsvr,key
来源: https://www.cnblogs.com/shujurener/p/15039330.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有