Tokyo Tyrant(TTServer)系列(六)-数据丢失谁的错
,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() 函数反序列化就能够使用了。
最新文章
- ASP.NET MVC 5调用其他Action
- 墙裂推荐4款js网页烟花特效
- HttpPostedFile类的使用方法
- Nginx+Varnish 实现动静分离,为服务器分流,降低服务器负载
- U3D中IOS平台泛型方法尽少使用
- js获取字符串的字节长度
- J2SE宏观总结
- Ubuntu 修改用户密码与启动root账号
- 项目SVN的IP地址发生变化时修改SVN为新的IP地址
- Java模拟登陆新浪微博抓取数据【转载】
- Web之CSS开发技巧: CSS @media
- poj 3984 迷宫问题(dfs)
- Oracle集群时区
- mysql 案例 ~ 瘦身mysql系列(1)
- .NET 常用ORM之Gentle.Net
- RabbitMq简单应用
- UVALive 6889 City Park 并查集
- 【Android】事件处理系统
- Convolutional Neural Networks
- 【转】ios 抓取 tcp/udp 包