Mongodb导入和解密更改的行

Mongodb导入和解密更改的行,mongodb,import,Mongodb,Import,我有一个大的csv文件,其中包含超过3000万行。我需要每天加载此文件,并确定哪些行已更改。不幸的是,没有唯一的键字段,但可以使用其中四个字段使其唯一。一旦我确定了更改的行,我就会想要导出数据。我曾尝试使用传统的SQL Server解决方案,但性能太慢,无法正常工作。因此,我一直在研究Mongodb—它在大约20分钟内成功导入了该文件(这很好)。现在我没有任何使用Monogdb的经验,更重要的是,我不知道最佳实践。因此,我的想法如下: 作为一次性导入,使用mongoimport将数据导入到集合中

我有一个大的csv文件,其中包含超过3000万行。我需要每天加载此文件,并确定哪些行已更改。不幸的是,没有唯一的键字段,但可以使用其中四个字段使其唯一。一旦我确定了更改的行,我就会想要导出数据。我曾尝试使用传统的SQL Server解决方案,但性能太慢,无法正常工作。因此,我一直在研究Mongodb—它在大约20分钟内成功导入了该文件(这很好)。现在我没有任何使用Monogdb的经验,更重要的是,我不知道最佳实践。因此,我的想法如下:

  • 作为一次性导入,使用mongoimport将数据导入到集合中

  • 复制mongo生成的所有唯一id,并将它们放在单独的集合中

  • 使用upsert字段将新数据导入现有集合,该字段应为每个新行和更改的行创建一个新id

  • 将“副本”与新集合进行比较,列出所有更改的行

  • 导出已更改的数据


  • 这对我来说是可行的,但我希望有更好的方法来解决这个问题。

    使用unix排序和差异

    对磁盘上的文件进行排序

    sort -o new_file.csv -t ',' big_file.csv
    sort -o old_file.csv -t ',' yesterday.csv
    
    diff new_file.csv old_file.csv
    
    命令可能需要一些技巧

    您还可以使用mysql通过

    (加载文件)

    然后在4个字段上创建键(或主键)

    然后将昨天的文件加载到另一个表中,然后使用2条sql语句比较这些文件

    但是,diff将工作得最好


    -丹尼尔

    我肯定会让diff命令去看看它的性能如何,这可能正是我想要的。非常感谢。