我手上有一个效率问题,我正在寻找解决它的方法。情况如下:
- 我有基于行的流式数据从在线来源进入系统,每个都有独特的
id
。 - 我有一个SQL数据库,其中包含现有的基于行的数据,按
id
索引。
如果SQL数据库 - 与数据库中已有的数据不同,则需要使用新数据流更新SQL数据库。
显而易见的解决方案是:
- 读取传入行
- 读取数据库中的相应行
- 如果数据不同,请更新数据库
大量的往返使这个算法变得不可思议地慢。
我拥有的替代解决方案是将整个SQL数据库读入内存,并与新的传入数据进行比较。这消除了往返,但所需的内存也使其不可行。
那么,我有什么选择呢?
-
将数据库拆分为多个部分。(解决大小问题)
-
设计一种算法,将其中一些数据库片段缓存到内存中。(速度)
-
根据传入的 id,将查询哈希到相关数据库。
如果无法有效地实现步骤 2,这将不起作用。