gpt4 book ai didi

wcf - 从内存中插入和查询数据的最佳实践

转载 作者:行者123 更新时间:2023-12-01 14:30:22 27 4
gpt4 key购买 nike

我们有一个应用程序可以获取实时数据并将其插入数据库。它每天在线4.5小时。我们在 17 个表中逐秒插入数据。用户可以随时查询任意一张表,获取最新的秒数据和历史上的一些记录...

使用 C# 控制台应用程序处理提要和插入...

处理用户请求是通过 WCF 服务完成的...

我们发现插入是我们的瓶颈;大部分时间都花在那里。我们花了很多时间尝试微调表格和索引,但结果并不令人满意

假设我们有足够的内存,将数据插入内存而不是数据库的最佳做法是什么。目前我们正在使用每秒更新和插入的数据表我们的一位同事建议在 feed-handler 和 WCF user-requests-handler 之间使用另一个 WCF 服务而不是数据库。 WCF 中间层应该是基于 TCP 的,它将数据保存在自己的内存中。有人可能会说,提要处理程序可能会处理用户请求,而不是在两个进程之间设置一个中间层,但是我们希望将事情分开,因此如果提要处理程序崩溃,我们仍然希望能够为用户提供当前记录

我们时间有限,想在短时间内把所有的东西都搬进内存里。在 2 个进程中间使用 WCF 是一件坏事吗?我知道请求会增加一些开销,但是所有这 3 个进程(feed-handler、内存数据库 (WCF)、用户请求处理程序 (WCF) 都将在同一台机器上,带宽不会那么多一个问题。

请协助!

最佳答案

我会研究创建数据缓存(这样您还可以减少数据库选择),并在数据写入数据库后使缓存中的数据无效。这样,您可以批量调用以执行较大的插入而不是许多较小的插入,但将数据保留在内存中以便读者可以读取它。实际上,如果您知道数据何时会过时,就可以避免完全读取数据库并将其用作后备存储 - 这样,数据库性能只会影响缓存的大小。

使缓存中的数据失效将取决于它是写入数据库还是已过时,以最后而不是最先出现为准。

缓存层不需要很复杂,但是它应该是多线程的来承载数据并在后台保存数据。该层将位于 WCF 服务(连接介质)的后面,WCF 服务应该改进以包含控制台应用程序的逻辑 + 批处理理念。然后控制台应用程序可以连接到 WCF 并向其抛出结果。

更新:唯一要说的是投资分析器,看看您是否在被屏蔽的代码中引入了任何性能问题。此外,分析您的数据库。您提到您需要快速插入和选择 - 不幸的是,它们通常会相互权衡......

关于wcf - 从内存中插入和查询数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com