处理从现有规范化mssql数据库导入的Solr增量数据。我无法决定我需要实施的策略,或者不知道是否有现成的工具来做同样的事情,所以我不需要重新发明轮子。
我需要将文档导入Solr 3.6以构建Solr数据,该数据以高度规范化的方式保存在MSSQL中。要检索单个文档的数据,需要许多连接来消除性能。我有appx。 db中有100万个这样的文件。所以完全导入Solr对我来说不是一个选择。
在决定方法时,我有两个需要考虑的问题:
我正在帮助您决定将增量数据导入Solr的策略和工具。我想,我有以下选择:
自定义开发应用程序以从MSSQL获取数据并将其传递给Solr。我需要跟踪数据,因为所有记录都插入Solr以及待处理的内容。同样,MSSQL中的2%数据记录每天都在不断更新,因此需要跟踪自那时以来哪些数据发生了变化,然后在某个时间点再次更新到Solr。
使用Solr中的任何现有工具或实用程序执行相同操作,例如DIH。我不确定这将如何解决增量数据检索的问题以及如何跟踪SQL服务器中哪些数据发生了变化?同样,不确定DIH如何处理复杂的连接需要从db获取数据。
或者使用像DIH这样的Lusql,胸围仍然不确定如何解决这两个问题。虽然Lusql能够在db中进行复杂的连接,所以我希望这可能符合我的目的。
我赞成在Solr中使用带有DIH的LuSQL,如果它符合目的,但仍不确定它如何跟踪哪些数据有变化?或者对于这部分,我必须通过维护文档ID来进行手动管理,然后将其提供给LuSQL以从SQL获取数据并导入到Solr中。
我也期待着你的建议来处理这种情况。
答案 0 :(得分:2)
我将与你分享我这样做的方式。
主要是我有相同的要求,直到本周我使用solr dataimport和delta进口。我有一个程序定期更新新项目的状态从0到1,然后调用solr数据导入以获取状态为1的所有文档.Solrdataimport使用存储过程来连接并从db获取状态为1的文档。如果导入成功完成,那么我将状态更新为2,我知道这些文件是在solr中。如果文档发生变化,我只需从状态2更改为状态0,然后导入过程就会在solr中更新文档。
使用此过程,一切正常。我总是在solr中获取新文档,而无需从数据库中获取所有数据。
现在我的要求已经改变,因为我们决定将日期保存在数据库中,因为我们只需要在solr中使用它。所以我需要一个程序来反序列化数据然后将它发送到solr。
我现在的方法是通过更新处理程序添加所有新的/更新的文档,并在我添加所有文档以提交它们之后,如果提交成功,那么我更新数据库中的状态。有了这种方法,我还没有经验,所以我不知道它是否会起作用,但我会试着看看会发生什么。
我在过去研究过更好的方法来做到这一点,但我找不到任何东西,如果你找到更好的解决方案,请与我分享。
祝你好运:)答案 1 :(得分:1)
我们必须从具有25个以上表的高度规范化模式中进行索引,其中一半表包含超过5M个记录。最大~20M。
我们使用informatica将这些记录从oracle加载到solr。像informatica这样的ETL工具提供了在关系数据库之外连接查询的表/结果的方法。它有一个分拣机转换来整理侧数据库。通过db之外的记录进行分组的聚合转换。还有一个查找转换..
基本上,我们的数据在阶段中被去规范化,并且分布加载/索引过程。
当然有开源ETL工具。有一个Microsoft ETL工具..
通过更新处理程序对solr进行索引.Delta索引与完全索引非常相似,并且具有更改数据捕获的附加逻辑。 ETL活动已安排。