使 elasticsearch 与密钥或版本控制保持同步
Keeping elasticsearch in sync with key or versioning
所以我遇到了很多大 XML 文件的情况,我希望在 elasticsearch 上同步这些数据。
当前方式
- 有index_1
- 更新数据时创建空白index_2
- 将所有最新数据加载到index_2
- 别名为 index_2 并删除 index_1
建议方式
- 有一个 synced.xml 文件已与 elasticsearch
同步
- 当新的 xml 文件可用时,与 synced.xml
进行比较
- 如果在日期为 xml 的文件中有任何新内容,请将其添加到 ES
- 将时间 xml 重命名为 synced.xml
这意味着在 500,000 个项目中,我只需添加例如已更改的 5,000 个项目,而不是复制 500,000 个项目。
问题
在这种情况下,如何确保它们已同步?例如,如果 elasticsearch 被擦除会发生什么,我如何告诉我的程序它需要再次添加所有内容。有没有办法在 elasticsearch 上使用某种同步密钥,或者更好的方法?
这是我推荐的...
在你的类型中添加一个存储字段来存储像 MD5 这样的散列
使用Scan/Scroll从ES中导出ID和Hash
在您的支持数据集中导出 ID 和哈希
使用类似 MapReduce 的东西来 "join" 对每个导出的 ID
设置
通过比较hash或发现有差异的地方
缺少钥匙,index/update
哈希仅在想要检测文档更改时才有用。这还假设您将 ES 的 ID 持久保存回您的后备存储或您自行分配 ID。
所以我遇到了很多大 XML 文件的情况,我希望在 elasticsearch 上同步这些数据。
当前方式
- 有index_1
- 更新数据时创建空白index_2
- 将所有最新数据加载到index_2
- 别名为 index_2 并删除 index_1
建议方式
- 有一个 synced.xml 文件已与 elasticsearch 同步
- 当新的 xml 文件可用时,与 synced.xml 进行比较
- 如果在日期为 xml 的文件中有任何新内容,请将其添加到 ES
- 将时间 xml 重命名为 synced.xml
这意味着在 500,000 个项目中,我只需添加例如已更改的 5,000 个项目,而不是复制 500,000 个项目。
问题
在这种情况下,如何确保它们已同步?例如,如果 elasticsearch 被擦除会发生什么,我如何告诉我的程序它需要再次添加所有内容。有没有办法在 elasticsearch 上使用某种同步密钥,或者更好的方法?
这是我推荐的...
在你的类型中添加一个存储字段来存储像 MD5 这样的散列
使用Scan/Scroll从ES中导出ID和Hash
在您的支持数据集中导出 ID 和哈希
使用类似 MapReduce 的东西来 "join" 对每个导出的 ID 设置
通过比较hash或发现有差异的地方 缺少钥匙,index/update
哈希仅在想要检测文档更改时才有用。这还假设您将 ES 的 ID 持久保存回您的后备存储或您自行分配 ID。