Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Database 高效地将流式输入与大型SQL数据库同步_Database_Synchronization - Fatal编程技术网

Database 高效地将流式输入与大型SQL数据库同步

Database 高效地将流式输入与大型SQL数据库同步,database,synchronization,Database,Synchronization,我手头有一个效率问题,我正在寻找解决办法。情况如下: 我有从在线来源进入系统的基于行的数据流,每个数据都有唯一的id 我有一个SQL数据库,包含现有的基于行的数据,通过id索引 如果SQL数据库与数据库中已有的数据不同,我需要使用新的数据流更新SQL数据库 显而易见的解决办法是: 读取传入行 读取数据库中相应的行 如果数据不同,请更新数据库 大量的往返使得该算法的速度非常慢 我拥有的另一种解决方案是将整个SQL数据库读入内存,并与新传入的数据进行比较。这消除了往返,但所需的内存也使其不可行

我手头有一个效率问题,我正在寻找解决办法。情况如下:

  • 我有从在线来源进入系统的基于行的数据流,每个数据都有唯一的
    id
  • 我有一个SQL数据库,包含现有的基于行的数据,通过
    id
    索引
  • 如果SQL数据库与数据库中已有的数据不同,我需要使用新的数据流更新SQL数据库
显而易见的解决办法是:

  • 读取传入行
  • 读取数据库中相应的行
  • 如果数据不同,请更新数据库
  • 大量的往返使得该算法的速度非常慢

    我拥有的另一种解决方案是将整个SQL数据库读入内存,并与新传入的数据进行比较。这消除了往返,但所需的内存也使其不可行

    那么,我还有什么选择呢

  • 将数据库拆分为多个部分。(解决尺寸问题)

  • 设计一种算法,将这些数据库片段中的一些缓存到内存中。(速度)

  • 根据传入的id,将查询散列到相关数据库


  • 如果第2步不可能有效地完成,这将不起作用

    批处理似乎是一种解决方案。可以按方便的时间单位(比如10秒)进行批处理,也可以按方便的记录数(比如100秒)进行批处理。然后可以在数据库中进行比较,一切都会更快。@GordonLinoff结果证明我有一个幸运的优化。因为我只是用新数据更新数据库,所以我可以发出替换而不是插入,并让数据库处理覆盖。不需要往返,而且速度非常快。