我有大约320万条记录的大量集合,这个集合数据每月都在更新,但源数据正在按原样获取,这意味着我不仅仅获得更新的记录,而是一切。 在性能方面,最好是简单地删除集合并插入所有内容或对每条记录进行更新吗? 还有一种很好的方法可以将现有记录与从源读取的记录进行比较,以检查是否有任何变化?
感谢。
答案 0 :(得分:0)
还有一种很好的方法可以比较现有记录和从源读取的记录,以检查是否有任何变化?
您正在搜索变更检测系统:这是ETL系统常见的问题。我建议你阅读一些关于ETL过程的内容(Kimball的Datawarehouse ETL Toolkit是一个很好的来源)。通常,检测变化是一个难题,并且涉及使用快照来计算差异。如果您确定您的收藏将始终保留在mongo存储中,您可以查看是否可以使用mongo日志。
此外,请考虑变更检测与数据的结构和含义非常相关:例如:如果您只有插入集合,则可以使用_id
获取更改的数据。
问题太复杂了,无法给出答案,比如“做这个和那个,你会得到它”;你必须分析你的数据,并了解什么是更好的方法:参考文献找到已知的解决方案,避免重新发明轮子。
就性能而言,最好是简单地删除集合并插入所有内容或对每条记录进行更新吗?
再次,您必须知道数据的结构。如果您的集合具有比常量部分更多的更改,则最好重新加载整个集合并避免跟踪更改。如果您的集合的变更集比整个集合小得多,则更新现有文档可以提高性能。
希望这有帮助。