【问题标题】:Chunked UrlDataSource For Solr DataImportHandlerSolr DataImportHandler 的分块 UrlDataSource
【发布时间】:2011-08-23 17:51:33
【问题描述】:

我正在研究将我的数据源分块以将最佳数据导入 solr,并且想知道是否可以使用将数据分块的主 url。

例如文件 1 可能有

<chunks>
  <chunk url="http://localhost/chunker?start=0&stop=100" />
  <chunk url="http://localhost/chunker?start=100&stop=200" />
  <chunk url="http://localhost/chunker?start=200&stop=300" />
  <chunk url="http://localhost/chunker?start=300&stop=400" />
  <chunk url="http://localhost/chunker?start=400&stop=500" />
  <chunk url="http://localhost/chunker?start=500&stop=600" />
</chunks>

每个块 url 都指向类似的东西

<items>
   <item data1="info1" />
   <item data1="info2" />
   <item data1="info3" />
   <item data1="info4" />
</iems>

我正在处理 500+ 百万条记录,因此我认为需要对数据进行分块以避免内存问题(在使用 SQLEntityProcessor 时遇到此问题)。我还想避免发出 500+ 百万个网络请求,因为我认为这可能会变得昂贵

【问题讨论】:

    标签: indexing solr bigdata


    【解决方案1】:

    由于互联网上缺乏示例,我想我会发布我最终使用的内容

    <?xml version="1.0" encoding="utf-8"?>
    <result>
      <dataCollection func="chunked">
        <data info="test" info2="test" />
        <data info="test" info2="test" />
        <data info="test" info2="test" />
        <data info="test" info2="test" />
        <data info="test" info2="test" />
        <data info="test" info2="test" />
        <data hasmore="true" nexturl="http://server.domain.com/handler?start=0&amp;end=1000000000&amp;page=1&amp;pagesize=10"
      </dataCollection>
    </result>
    

    请务必注意,我使用指定下一页有更多内容并提供下一页的网址。这与Solr Documentation for DataImportHandlers 一致。请注意,文档指定分页提要应该告诉系统它有更多信息以及从哪里获得下一批。

    <dataConfig>
        <dataSource name="b" type="URLDataSource" baseUrl="http://server/" encoding="UTF-8" />
        <document>
            <entity name="continue"
                    dataSource="b"
                    url="handler?start=${dataimport.request.startrecord}&amp;end=${dataimport.request.stoprecord}&amp;pagesize=100000"
                    stream="true"
                    processor="XPathEntityProcessor"
                    forEach="/result/dataCollection/data"
                    transformer="DateFormatTransformer"
                    connectionTimeout="120000"
                    readTimeout="300000"
                    >
                <field column="id"  xpath="/result/dataCollection/data/@info" />
                <field column="id"  xpath="/result/dataCollection/data/@info" />
                <field column="$hasMore" xpath="/result/dataCollection/data/@hasmore" />
                <field column="$nextUrl" xpath="/result/dataCollection/data/@nexturl" />
            </entity>
        </document>
    

    注意 $hasMore 和 $nextUrl 字段。您可能希望放置超时。我还建议允许指定页面大小(它有助于 tweeking 设置以获得最佳处理速度)。我在具有四核 Xeon 处理器和 32GB 内存的单个服务器上使用多核 (3) solr 实例每秒索引大约 12.5K 条记录。

    对结果进行分页的应用使用与存储数据的 SQL 服务器相同的系统。当我们最终对 solr 服务器进行负载平衡时,我还传递了开始和停止位置以最小化配置更改....

    【讨论】:

      【解决方案2】:

      可以嵌套实体以执行您最初想要的操作。内部实体可以像 url="${chunk.link}" 这样引用外部字段,其中 chunk 是外部实体名称,link 是字段名称。

      <?xml version="1.0" encoding="windows-1250"?>
      <dataConfig>
        <dataSource name="b" type="URLDataSource" baseUrl="http://server/" encoding="UTF-8" />
        <document>
          <entity name="chunk"
            dataSource="b"
            url="path/to/chunk.xml"
            stream="true"
            processor="XPathEntityProcessor"
            forEach="/chunks/chunk"
            transformer="DateFormatTransformer"
            connectionTimeout="120000"
            readTimeout="300000" >
            <field column="link" xpath="/chunks/chunk/@url" />
            <entity name="item"
              dataSource="b"
              url="${chunk.link}"
              stream="true"
              processor="XPathEntityProcessor"
              forEach="/items/item"
              transformer="DateFormatTransformer"
              connectionTimeout="120000"
              readTimeout="300000" >
              <field column="info"  xpath="/items/item/@info" />
            </entity>
          </entity>
      </document>
      </dataConfig>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-28
        • 2013-01-27
        • 2012-06-21
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 2013-09-10
        • 1970-01-01
        相关资源
        最近更新 更多