热门标签 | 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() 函数反序列化就可以使用了。



推荐阅读
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 本文详细介绍了在 Windows 7 上安装和配置 PHP 5.4 的 Memcached 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • 对于内存仅为512MB、硬盘80GB的老旧设备,部署Ubuntu Server毫无压力。然而,许多平台仅支持CentOS系统,而CentOS默认要求1GB以上内存才能使用图形界面安装。实际上,安装完成后,即使内存低至256MB也能正常运行。此外,通过优化系统配置和减少不必要的服务,可以进一步提升系统性能,确保在资源受限的环境中稳定运行。 ... [详细]
  • 本文介绍了如何在 DB2 环境中创建和删除数据库编目。创建编目是连接新数据库的必要步骤,涉及获取数据库连接信息、使用命令行工具进行配置,并验证连接的有效性。删除编目则用于移除不再需要的数据库连接。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 如何在PHP中有效实现和管理互斥锁机制(PHP锁) ... [详细]
  • 在《PHP应用性能优化实战指南:从理论到实践的全面解析》一文中,作者分享了一次实际的PHP应用优化经验。文章回顾了先前进行的一次优化项目,指出即使系统运行时间较长后出现的各种问题和性能瓶颈,通过采用一些通用的优化策略仍然能够有效解决。文中不仅详细阐述了优化的具体步骤和方法,还结合实例分析了优化前后的性能对比,为读者提供了宝贵的参考和借鉴。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 本文将深入探讨MySQL与MongoDB在游戏账户服务中的应用特点及优劣。通过对比这两种数据库的性能、扩展性和数据一致性,结合实际案例,帮助开发者更好地选择适合游戏账户服务的数据库方案。同时,文章还将介绍如何利用Erlang语言进行高效的游戏服务器开发,提升系统的稳定性和并发处理能力。 ... [详细]
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社区 版权所有