最快/最好的方法来序列化和反序列化数据库中的数据

时间:2014-04-30 17:14:35

标签: c++ database serialization thrift

几个月后,我将开始写我的学士论文。虽然我们只粗略地讨论了我的论文主题,但主要问题是这样的:

用C ++编写的程序(或多或少是一个HTTP服务器,但我想这里没关系)必须执行才能完成它的任务。该程序有多个实例同时运行,并且负载均衡器负责在所有实例之间平均分配http请求。每次更改程序代码以增强它或消除错误时,都必须重新启动所有实例。对于一个实例,这可能需要长达40分钟。由于运行的实例超过十个,重启过程最多可能需要一个工作日。这是缓慢的方式。

假定的瓶颈是在启动期间访问数据库以加载所有必要的数据(猜测它将是一个mysql数据库)。团队领导者减少启动过程所需时间的想法是将数据库的内容序列化为文件,并从该文件读取而不是从数据库中读取。那将是我的任务。当然问题是要检查数据库中是否有新数据,而不是文件中的新数据。我想写进程仍然应用于数据库,而不是应用于序列化文件。我的第一个想法是使用apache thrift进行序列化和反序列化,因为我已经使用它并且它很快,据我所知(也许我写了一些小的python程序,来处理这个)。但是,我有一些关于这个问题的基本问题:

  • 从文件读取而不是从数据库读取是一个很好的解决方案。这有可能节省时间吗?
  • 在这种情况下,thrift会运行良好,还是有一些更快的序列化/反序列化方法
  • 因为我只是在阅读而不是写作,所以我不需要保持一致性,对吗?
  • 您能否推荐一些值得阅读的有关此主题的书籍或在线文献。

如果我遗漏了信息,请问。提前致谢。我只想在开始论文之前充分了解和准备,这就是我要问的原因。

亲切的问候

迈克尔

1 个答案:

答案 0 :(得分:0)

缓存为王

作为一般建议:缓存是王道,但不要使用文件。

<强>缓存?什么缓存?

我所谈论的缓存当然是外部缓存。有许多系统可用,其中很多系统能够形成缓存集群,缓存项目分布在多个机器的RAM中。如果你巧妙地做到这一点,那么与磨削数据库的成本相比,序列化/反序列化到内存中的成本将使你的算法大放异彩。最重要的是,你可以获得很好的功能,比如TTL用于缓存数据,缓存即使你的业务逻辑崩溃也会持续存在,等等。

一致性怎么样?

  

因为我只是在阅读而不是写作,所以我不必保持一致性,对吗?

错误。问题不在于写入数据库。它是关于是否有人写入数据库,这种情况发生的频率,以及您的数据需要的最新情况。

即使您按照问题中的计划将数据缓存到文件中,也必须注意这会产生冗余数据重复,与原始数据源断开连接。因此,您必须回答的真正问题(我不能为您做到这一点)是,最佳更新频率应该是多少。您是否需要在近期立即更新?是否可以接受一定的时间差?

这正是您可以放入缓存数据的TTL(生存时间)值的目的。如果您需要更频繁的更新,请设置一个简短的TTL。如果您对较慢频率的更新感到满意,请相应地设置TTL或运行执行更新的计划任务/线程/进程。

好的,明白了。现在怎么办?

查看Redis或&#34; oldtimer&#34; Memcached的。你没有对你的平台说太多,但是有两种Linux版本和Windows版本(特别是在Windows上你可以用Redis获得更多的乐趣)。

PS:哦,是的,Thrift序列化可以用于序列化部分。