设计问题:从低延迟的c++应用程序更新数据库
Design problem: Updating database from a low latency C++ application
我正在用c++开发一个低延迟的应用程序。我还需要更新我的处理和所有状态更改的数据库。为了节省调用数据库更新所涉及的延迟,我在应用程序中使用本地数据结构(内存中)。
但是我仍然需要更新数据库。我应该使用一个单独的线程更新数据库吗?如何在节省数据库延迟的同时保持数据库最新
为了最小化延迟,您肯定需要一个数据库线程(我称之为DBT)。
但是,如果更新频繁,则需要缓冲更改,并让DBT在将更新推送到实际数据库之前合并任何更新。如果球员。X = 1,然后是玩家。x = 2时,DBT可以跳过第一个。如果更新非常快,并且数据集不是很大,那么您可以考虑定期进行完整转储,而不是运行更新。例如,每隔60秒"保存"你正在做的事情,而不是向数据库发送完成的每个动作的列表。答案很大程度上取决于你在做什么。这里没有一个放之四海而皆准的答案。
有一个绝对好的解决方案:尽可能少地保存到数据库。你不需要每秒钟都呼叫save,在大多数情况下,你可以安全地每分钟呼叫一次DB,甚至更少。
结合给出的答案并运用我自己的想法,我正在考虑实施以下策略:-—动态更新本地数据结构并转储到文件而不是数据库-一个单独的数据库线程将从文件中读取并将其转储到数据库(实际上将不得不采取锁并移动现有文件并将内容复制到数据库)
你说什么?上述解决方案中的任何漏洞。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?