我正在开发一个应用程序,该应用程序将读取零个或多个CSV文件中的数据,我将其称为“外部”文件。数据。应用程序将在其自己的(SQLite)表中维护派生的('内部')数据,这些数据与'行'相关联。 (行)在外部数据中,以便用户可以插入,删除或更改行,并且派生数据仍将与同一行相关联。如果外部数据是Postgres表,我可以使用行OID链接/加入'外部数据。与内部'数据。内部和外部行之间存在1:1的对应关系。
因此,当应用程序启动时,它将读取外部文件。如果已删除行,则将删除相应的内部行。如果添加了行,则会在内部数据中添加新行。如果已更改行,则内部数据将保持不变。没有关键的'外部数据中可以假设不会改变的字段。
现在这有点启发式,但正如我所说,我希望能够在外部CSV中检测到CRUD,所以我认为计算256位CRC'指纹&#39 ;对于每个外部行,并将其存储在内部SQLite表中。然后当应用程序启动时,它同时具有内部和外部 [Integer] ,它可以像GNU / Unix / Linux diff 程序一样比较,以检测外部文件。我确实想要两个单独的表格:我想让用户提供“外部”表格。 CSV,并更改它,但我想控制内部'内部的内容。表
我希望外部数据大约为几百行;最多说1000。
所以我的问题是:是否有任何库可以启发式地比较两个指纹 [整数] 并在添加,删除和更改方面输出最小差异列表?或那个方向的任何东西?
作为补充,有一个相对稳定的指纹算法会很好;也就是说,输出略有变化但输出略有变化,但不如上面的主要问题那么重要。
答案 0 :(得分:1)
我的建议:不要打扰指纹。使用Diff包;您可以指定任何单记录更改的成本,它将找到最小成本的整体更改(受通常的差异限制:不重新排序等)。
如果你想支持重新排序,你会失去大量的效率,但它仍然可以完成。