2017-08-07 85 views
0

我擁有大約2100000行的數據。完全進口所花費的時間約爲2分鐘。對於表中的任何更新,我使用增量導入來索引更新。增量導入需要6分鐘的時間。solr中delta導入的效率方面

考慮到效率方面,最好進行全面導入而不是增量導入。那麼,三角洲進口的需求是什麼?有沒有更好的方式來使用增量導入來提高效率?

我按照documentation中的步驟操作。

數據-config.xml中

<dataConfig> 
<dataSource type="JdbcDataSource" driver="com.dbschema.CassandraJdbcDriver" url="jdbc:cassandra://127.0.0.1:9042/test" autoCommit="true" rowLimit = '-1' batchSize="-1"/> 
<document name="content"> 
    <entity name="test" query="SELECT * from person" deltaImportQuery="select * from person where seq=${dataimporter.delta.seq}" deltaQuery="select seq from person where last_modified &gt; '${dataimporter.last_index_time}' ALLOW FILTERING" autoCommit="true"> 
     <field column="seq" name="id" /> 
     <field column="last" name="last_s" /> 
     <field column="first" name="first_s" /> 
     <field column="city" name="city_s" /> 
     <field column="zip" name="zip_s" /> 
     <field column="street" name="street_s" /> 
     <field column="age" name="age_s" /> 
     <field column="state" name="state_s" /> 
     <field column="dollar" name="dollar_s" /> 
     <field column="pick" name="pick_s" /> 
    </entity> 
</document> 

+0

告訴我們dih config – Persimmonium

+0

我更新了問題。 –

+0

您的deltaquery返回多少行?如果您在Solr之外運行deltaquery,運行多長時間?這聽起來像你的deltaquery不是很優化(即沒有適當的索引等) – MatsLindh

回答

0

建立索引增量(像你這樣)通常使用的方法,跑2個查詢,而不是單一的一個。所以在某些情況下它可能不是最佳的。

我更喜歡設置增量like this,因此只有一個查詢需要維護,它更乾淨,增量運行在單個查詢中。你應該嘗試一下,這可能會改善事情。缺點是刪除,你要麼做一些軟刪除,或者你仍然需要通常的三角洲配置(我贊成第一)。

此外,當然,確保last_modified列正確索引。我不熟悉Cassandra jdbc驅動程序,你應該仔細檢查。

最後一件事,如果您使用的是Datastax Entreprise Edition,則可以通過Solr對其進行查詢(如果已爲此配置)。在這種情況下,您也可以嘗試關閉SolrEntityProcessor並使用一些請求參數技巧,您也可以完成索引和增量索引。我過去成功地使用了它。

+0

是否有可能在同一個核心中的同一張表上有兩個實體?一個用於完全導入(正常完全導入)和查詢的另一個實體,因此,如果我每天運行第一個實體一次,刪除的數據將被刪除。第二個實體查詢將每10分鐘運行一次,以便更新數據。 –

+0

http://lucene.472066.n3.nabble.com/DataImportHandler-Problems-with-delta-import-and-CachedSqlEntityProcessor-td4071848.html是否有可能這樣做,以便不會有任何還有刪除問題。 –

+0

感謝它的工作。 –