下文为使用ttserver过程中的一些经验总结或笔记。记之以备忘:
1. ttserver b+树参数含义
B+ tree database supports
"mode", can contain "w" of writer, "r" of reader, "c" of creating, "t" of truncating, "e" of no locking, and "f" of non-blocking lock. The default mode is relevant to "wc".
"lmemb", lmemb 用于指定被缓存的页级节点数
"nmemb", 用于指定被缓存的非页级节点数,通常为页级节点数的两倍
"bnum", `bnum' 指定bucket存储桶的数量。如果指定的数目不大于0,将会使用默认的数值131071.推荐数量应该在所有需要存储的记录总数的0.4-4倍
"apow", `apow' 跟一个key关联的记录数,2的N次方表示. 如果不指定,默认2^4=16.
"fpow", `fpow' specifies the maximum number of elements of the free block pool by power of 2. 默认2^10=1024.
"opts", "opts" can contains "l" of large option, "d" of Deflate option, "b" of BZIP2 option, and "t" of TCBS option.
"lcnum", #lcnum=xxx#bnum=yyy" 来提高性能.第一个参数指定被缓存的最大叶子节点数,受内存容量限制,第二个参数指定桶的数量,它应该大于总记录数的1/128
"ncnum",
"xmsiz" xmsiz 指定外部内存的大小。如果不大于0,内存不可用。默认是67108864,即64M。
"dfunit".
lmemb 用于指定被缓存的页级节点数
nmemb 用于指定被缓存的非页级节点数,通常为页级节点数的两倍
bnum 用于指定bucket array的数量。bnum的数量应该大于存储总记录数的1/128。
2. TCH VS TCB
TCBDB(查找的时间复杂度为“O(log n)”)虽然速度比TCHDB(查找的时间复杂度为“O(1)”)慢一些,但是,它对内存的依赖度要比TCHDB小得多,
随着数据量增大,写入速度也稳定,适合存储大量数据。
如果存储8GB的数据, TCBDB只使用了160M的内存缓存,而TCHDB则需要设置8GB xmsiz内存才能保证速度。
实例:Tokyo Tyrant 的B+Tree数据库,优化参数如下:
ttserver -host 192.168.1.2 -port 11211 -thnum 4 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 195 -rts /ttserver/ttserver.rts /ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=20000000
从我自己的实践来看,TCH在数据量很大时,尤其是接近了内存限制时,非常不稳定,经常崩溃(3天两头)。
当我将格式调整为TCB后,崩溃再也没有发生(一年多时间)。
3. master & slave
ttserver的数据执行备份时,整个数据库被锁定,如果数据库数据量较大,则会导致ttserver长时间不能响应,各种操作会因为超时而失败。
解决方法很简单:为ttserver建一个slave库,slave仅负责数据同步和数据备份。这样一方面可以保证数据的及时同步提高可靠性,同时也可以对
数据执行一些特定处理(如备份等)而完全不影响在线ttserver库的访问。
4.关于ttserver c#库
已经记不清楚当时使用的什么库,可能是官网直接推荐的一个。用了后发现问题比较多,记忆最为深刻的是:
ttsever c#库的实现有一个bug,当数据大于1G时,数据处理会出错,可能是其中对long型整形数据的处理有问题。
还有一些连接导致卡死问题。后来我们该用了带超时的连接解决的。
详情以后补充。
1. ttserver b+树参数含义
B+ tree database supports
"mode", can contain "w" of writer, "r" of reader, "c" of creating, "t" of truncating, "e" of no locking, and "f" of non-blocking lock. The default mode is relevant to "wc".
"lmemb", lmemb 用于指定被缓存的页级节点数
"nmemb", 用于指定被缓存的非页级节点数,通常为页级节点数的两倍
"bnum", `bnum' 指定bucket存储桶的数量。如果指定的数目不大于0,将会使用默认的数值131071.推荐数量应该在所有需要存储的记录总数的0.4-4倍
"apow", `apow' 跟一个key关联的记录数,2的N次方表示. 如果不指定,默认2^4=16.
"fpow", `fpow' specifies the maximum number of elements of the free block pool by power of 2. 默认2^10=1024.
"opts", "opts" can contains "l" of large option, "d" of Deflate option, "b" of BZIP2 option, and "t" of TCBS option.
"lcnum", #lcnum=xxx#bnum=yyy" 来提高性能.第一个参数指定被缓存的最大叶子节点数,受内存容量限制,第二个参数指定桶的数量,它应该大于总记录数的1/128
"ncnum",
"xmsiz" xmsiz 指定外部内存的大小。如果不大于0,内存不可用。默认是67108864,即64M。
"dfunit".
lmemb 用于指定被缓存的页级节点数
nmemb 用于指定被缓存的非页级节点数,通常为页级节点数的两倍
bnum 用于指定bucket array的数量。bnum的数量应该大于存储总记录数的1/128。
2. TCH VS TCB
TCBDB(查找的时间复杂度为“O(log n)”)虽然速度比TCHDB(查找的时间复杂度为“O(1)”)慢一些,但是,它对内存的依赖度要比TCHDB小得多,
随着数据量增大,写入速度也稳定,适合存储大量数据。
如果存储8GB的数据, TCBDB只使用了160M的内存缓存,而TCHDB则需要设置8GB xmsiz内存才能保证速度。
实例:Tokyo Tyrant 的B+Tree数据库,优化参数如下:
ttserver -host 192.168.1.2 -port 11211 -thnum 4 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 195 -rts /ttserver/ttserver.rts /ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=20000000
从我自己的实践来看,TCH在数据量很大时,尤其是接近了内存限制时,非常不稳定,经常崩溃(3天两头)。
当我将格式调整为TCB后,崩溃再也没有发生(一年多时间)。
3. master & slave
ttserver的数据执行备份时,整个数据库被锁定,如果数据库数据量较大,则会导致ttserver长时间不能响应,各种操作会因为超时而失败。
解决方法很简单:为ttserver建一个slave库,slave仅负责数据同步和数据备份。这样一方面可以保证数据的及时同步提高可靠性,同时也可以对
数据执行一些特定处理(如备份等)而完全不影响在线ttserver库的访问。
4.关于ttserver c#库
已经记不清楚当时使用的什么库,可能是官网直接推荐的一个。用了后发现问题比较多,记忆最为深刻的是:
ttsever c#库的实现有一个bug,当数据大于1G时,数据处理会出错,可能是其中对long型整形数据的处理有问题。
还有一些连接导致卡死问题。后来我们该用了带超时的连接解决的。
详情以后补充。
本文分享了在使用TTServer过程中的经验总结,包括B+树参数含义、TCB与TCHVSTCB的区别、master与slave配置、以及TTServerc#库的使用注意事项。重点介绍了如何通过调整参数来优化性能,特别强调了TCB在大数据量场景下的稳定性优势。此外,还提出了建立slave库以实现数据备份和同步的方法,以及TTServerc#库在处理大数据时存在的问题和解决方案。
233

被折叠的 条评论
为什么被折叠?



