我正在执行一个solr-dih(dataimporthandler)任务,导入存储在Oracle数据库中的大约2000万个文档。最初,这些进口每秒将增加到500多个文档,但在前150000个文档中,速度将降至200以下,最终降低到50-60/s左右;此时,我的耐心达到了极限,我终止了这一过程。导入500万份文档不需要超过30个小时。
这些文档存储为xmltype,因此它们必须在查询中“解码”或外推。
一些团队成员认为使用getclobval()会导致JDBC管道中的内存膨胀和资源消耗(可能在服务器端),但我的测试(将getclob与xmlseriaize进行比较)似乎无法证明这一点。
也许在JDBC连接器中还有一些我还没有尝试过的连接选项,它们可以帮助减少开销并保持高吞吐量。
在过去,我使用简单的HTTP Post(在casperjs和php中)在不到一天的时间内提交了1.5亿个文档。所以我相信这是索尔·迪赫和/或我们与甲骨文的联系方式的问题。
连接如下:
name="OracDB"
type="JdbcDataSource"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@vape.blah-blah-blah.PUB"
user="some-user-name"
password="some-user-name"
convertType="true"
/>
查询如下
选择
产品ID,
产品类型,
状态,
XML序列化(文档docxml)为XML
从
cdbxml.products产品
哪里
产品“type='megasowe'
和总成状态
此处使用xpath从该数据库中的XML获取数据…看起来是这样的:
name="DB/Import"
dataSource="OracDB"
onError="skip"
query=""
>
name="productxml"
rootEntity="false"
dataSource="db"
dataField="DB/Import.XML"
processor="XPathEntityProcessor"
transformer="TemplateTransformer,com.megacorp.solr.dih.Transform"
forEach="/document">
[... and a bunch more stuff ...]
我已经运行了很多测试,以查看托管架构或import.xml配置中的更改是否可以改善或降低接收,从而导致无效。
几周前的某个时间点,流程在11小时内导入了700万个文档,然后源数据集增加到了近2000万个文档,这时事情似乎偏离了轨道。
我是否有错误的JDBC连接器设置?我是否可以设置一些内容来告诉Oracle不要缓存此查询..或…???这个问题使我们困惑。在我不得不在HTTPD上输入旧的暴力数据之前寻找一些提示。