Tokyo Tyrant(TTServer)系列(六)-数据丢失谁的错

前面的一些文章讲到了memcache以及TT。memcache内存数据库非常好理解。数据存储在内存中,重新启动服务器或者重新启动memcahce进程,数据是会丢失的。

那么我们也提到过TTServer数据是持久存储的,它的数据真是绝对安全吗?

       以下我们来详细測试一下,在測试服务器启动两个ttserver,不记录日志。

1
2
ttserver -port 1978 -dmn -pid /data/ttserver/test1/pid /data/ttserver/test1/casket.tch
ttserver -port 1979 -dmn -pid /data/ttserver/test2/pid /data/ttserver/test2/casket.tch

 

       依据网上的測试方法:分别往两个端口写入10000条数据,kill -9 pid掉进程,再启动ttserver。查看数据是否丢失,发现没有丢失,这里能够推断ttserver意外崩溃是不会丢失数据的。

       以下再来断电測试。先用以下的代码往两个端口的ttserver写50000条数据:

复制代码
 
    
<?

php
$mem = new Memcache();
$mem -> addServer ( " 127.0.0.1 " , 1979 , false , 1 , 100 );
$mem -> addServer ( " 127.9.9.1 " , 1978 , false , 1 , 100 );
$start = microtime ( true );
for ( $i = 0 ; $i < 50000 ; $i ++ ){
$mem -> add( "test _ " . $i , " INFO 127122222 a b c d{....} " );
}
print_r ( $mem -> getExtendedStats());
echo microtime ( true ) - $start ;
?>
复制代码

 

     运行过程中。拔掉机器电源后,再又一次启动机器。然后启动ttserver 。发现两个端口的ttserver都仅仅剩下16000条数据(我測试的结果)。

    所以:ttserver意外崩溃。比如进程直接kill -9 是不会丢失数据的。假设系统断电是会丢失数据的。

这应该是ttserver仅仅是把数据写到文件系统,并没有flush到磁盘造成的。

怎样解决(參考网上资料)

    ttserver 事实上提供了一个同步命令sync,能够把数据flush到磁盘。只是每次都调用。性能将会急剧下降。为了不减少性能。数据可靠性得到保证,能够採用记录日志的方式,出现意外断电能够从日志恢复数据。还能够使用主从复制。master丢失数据,slave的数据还在(推荐),也能够定期的运行下sync命令。

    事实上,这个与mysql数据库事务日志刷新级别有极其类似的原理。TC支持异步的写入机制。就是说写入的数据能够不一定刷到磁盘上。能够等到一定条件后(比方间隔多长时间)再进行同步操作。

这个异步的优点当然就是快,坏处当然就是可能在突发情况下丢失一些数据。TC的大部分写入方法都是同步的。并且会在操作过程中进行异步数据的同步磁盘写入。

   假设是数据不是特别大(一般不要超过内存太多,依据操作系统。32位的操作系统单个文件不能超过2G,64位操作系统则无限制)

注:序列化问题 
在实际应用中更经常使用 memcache 协议使用ttserver。当我们从中取数据时,会是一个序列化的字符串,没有自己主动反序列化处理。但在memcached服务器上却是自己主动反序列化的。这样我们先将数据取出。如:
 a:1:{s:5:"value";s:14:"this is a value";} ,再利用 unserialize() 函数反序列化就能够使用了。


转载于:https://www.cnblogs.com/llguanli/p/8692368.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值