Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设计问题:从低延迟C++;应用 我正在开发一个C++中的低延迟应用程序。我还需要更新处理和所有状态更改的数据库。为了节省调用数据库更新的延迟,我在应用程序中使用了本地数据结构(内存中)_C++_Database_Performance - Fatal编程技术网

设计问题:从低延迟C++;应用 我正在开发一个C++中的低延迟应用程序。我还需要更新处理和所有状态更改的数据库。为了节省调用数据库更新的延迟,我在应用程序中使用了本地数据结构(内存中)

设计问题:从低延迟C++;应用 我正在开发一个C++中的低延迟应用程序。我还需要更新处理和所有状态更改的数据库。为了节省调用数据库更新的延迟,我在应用程序中使用了本地数据结构(内存中),c++,database,performance,C++,Database,Performance,但我还需要更新数据库。我应该使用单独的线程更新数据库吗?如何节省数据库延迟,同时保持数据库的最新状态。要使延迟最小化,您肯定需要一个数据库线程(我称之为DBT)。 但是,如果更新频繁,则需要缓冲更改,并让DBT在将更新推送到实际数据库之前合并所有更新。如果player.x=1,则player.x=2,则DBT可以跳过第一个更新。 如果更新非常快,而且数据集不是巨大的,那么你可以考虑定期完全转储而不是运行更新。Eg,像“保存”你每60秒所做的,而不是向数据库发送每一个动作的列表。 答案在很大程度上

但我还需要更新数据库。我应该使用单独的线程更新数据库吗?如何节省数据库延迟,同时保持数据库的最新状态。

要使延迟最小化,您肯定需要一个数据库线程(我称之为DBT)。
但是,如果更新频繁,则需要缓冲更改,并让DBT在将更新推送到实际数据库之前合并所有更新。如果player.x=1,则player.x=2,则DBT可以跳过第一个更新。 如果更新非常快,而且数据集不是巨大的,那么你可以考虑定期完全转储而不是运行更新。Eg,像“保存”你每60秒所做的,而不是向数据库发送每一个动作的列表。
答案在很大程度上取决于你在做什么。这里没有一个一刀切的答案。

有一个绝对好的解决方案:尽可能少地保存到数据库。你不必每秒调用saving,在大多数情况下,你可以每分钟安全地调用DB一次,甚至更少的频率。

结合给定的答案和applying根据我自己的想法,我正在考虑实施以下战略:- -动态地更新本地数据结构并转储到文件而不是数据库 -一个单独的数据库线程将从文件中读取并将其转储到数据库中(实际上必须锁定并移动现有文件并将内容复制到数据库)

你说什么?
上述解决方案中存在任何漏洞。

如果您提供了更多背景信息,将更容易提供帮助。您的应用程序是什么?您在数据库中存储了什么?您是否需要近实时更新数据库?如果不需要,为什么不定期脱机同步您的本地数据?该应用程序是一个交易引擎。我需要不断更新数据库并使其恢复ilient失败。允许延迟数据库更新,但不能错过。因此,我正在寻找某种中间层,在那里我可以转储数据库更新并继续(其他一些线程会自动更新主数据库)。有没有这样的解决方案?不,这并不总是明智的。如果数据是关键任务,并且您需要故障恢复能力,该怎么办?您的进程死机或sqld崩溃,而您刚刚丢失了最后一分钟(甚至更多)的所有数据。如果你做的是低延迟的事情,并且不能在两次保存之间留出很长的时间间隔,那么你已经知道解决方案,否则你将无法得到那份工作;)我认为问题与游戏有关-在游戏中,即使损失十分钟也不会有多大影响。是的,数据库更新不能错过。它们可能会延迟,但它们需要具有故障恢复能力@Xirdus:“你应该已经知道怎么做了”并不是这个问题的有效答案。你怎么会认为这与游戏有关?我从来没有让超过100名代表这么说过!@Moing:我不是代表挑剔;)数据库线程(DBT)这正是我想要的。有现成的解决方案吗?请分享更多想法。@Ashish Grover:有很多线程库,比如。至于实现数据库推送,您可能需要编写自己的线程。很难找到一个特定于您所做工作的库。