1
2
很难直接回答你的问题,但这里有一些基于我们在多个活跃用户情况下所做的提示。 如果每次击键时都要写入/触发,请将击键传递到后台线程,不要执行数据库写入或任何网络调用,同时阻止用户键入。一个打字速度快的打字员每秒可以击20次键,你无法承受延迟。
你真的需要保存每一次击键,还是每N秒一次可以接受?每个保存操作最终都会变成一个磁盘操作,因此您确实希望合并尽可能多的保存。做某事最快的方法就是根本不做。 如果您正在记录到数据库,那么更新现有行通常会更快,前提是您可以先通过直接键获取它。不幸的是,有时插入新行并在以后清理多余的行会更快。如果表的索引很少,则情况往往如此。哪个更快取决于正在使用的数据库引擎及其使用方式。我们使用这两种方法。 在使用数据库时,请记住,它们通常会保存某种类型的日志,因此如果您经常更新,则可能会在日志文件上产生较大的负载。 如果您正在使用诸如fopen之类的技术(使用C术语),那么fwrite这些技术可以很好地执行,但如果您担心系统故障恢复,则可能需要调用fsync,这会限制您的最大性能速率。如果需要fsync,数据库可能更好。 您可能希望考虑非常频繁地写入transactionlog表,然后每N秒发布到实际存储器。例如,如果我输入一个客户的名字,我可能会将每次击键记录到一个keylog表中,然后让后台作业读取keylog表并将数据传输到customers表。这有助于减少对customers表的操作,同时允许优化keylog表以记录击键。但是,以服务器端的更多代码为代价。 总的来说,你需要这样的逻辑 关于键控处理器
背景线程
记住以上内容,用户可以键入并立即点击close,因此您的最终缓冲区写入可能尚未刷新。你需要处理这件事。 如果正确,用户将不会注意到任何延迟。在我们的使用中,我们平均每秒记录约1000次击键,所有击键都通过专用网络路由到中心点。这种负载几乎是暂时的,即使网络监控也看不到如此少量的流量。 |
user3216514 · WebSocket和可扩展性 7 年前 |
greg · 如何检测多核可扩展性/争用问题 7 年前 |
Sonam · rabbit mq的缩放 7 年前 |
Kevin Cohen · neo4j获取新节点列表(更改提要) 7 年前 |
coolk · rdbms的自动保存性能 7 年前 |
Leonardo · 线程池。将线程设置为预热策略 7 年前 |
stojsins · CSS可扩展性图像映射 9 年前 |
fstab · 对正常控制流程使用例外情况是一种不鼓励还是不鼓励的做法? 11 年前 |