热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

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

前面的一些文章讲到了memcache以及TT,memcache内存数据库很好理解,数据存储在内存中,重启服务器或者重启memcahce进程,数据是会丢失的。那么我们也提到过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() 函数反序列化就可以使用了。



推荐阅读
  • http:simple-is-better.comnews1047Firefly是免费、开源、稳定、快速扩展、能“热更新”的分布式游戏服务器端框架,采用Python编 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 一,织梦后台后台设置进入系统后台,在[系统基本参数]下面的性能选项卡当中,关于memcache进行如下配置:cfg_memcache_enable:是否启用memcache缓存,如果为否(N) ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 都说Python处理速度慢,为何月活7亿的 Instagram依然在使用Python?
    点击“Python编程与实战”,选择“置顶公众号”第一时间获取Python技术干货!来自|简书作者|我爱学python链接|https:www.jian ... [详细]
  • 0x00端口渗透端口扫描端口的指纹信息(版本信息)端口所对应运行的服务常见的默认端口号.尝试弱口令端口爆破hydra端口弱口令NTScanHs ... [详细]
  • 下图|通用型_企业用户如何选择合适的云服务器配置?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了企业用户如何选择合适的云服务器配置?相关的知识,希望对你有一定的参考价值。随着网络飞速发展,企业上云已成为 ... [详细]
  • 由PHP转让Memcahce,首先,需要在server安装Memcache,如何安装Memcache这不是本文的重点,大约m ... [详细]
  • yii框架目录结构详细分析说明
    php教程|php手册yii,目录结构php教程-php手册yii框架目录结构详细分析说明猫狗大战源码,华为云电脑ubuntu,梦见放走很多爬虫,parttmpphp,seo页面描 ... [详细]
author-avatar
老陈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有