- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的生产数据库中有 256 个表。每个表大约有 10,000,000 行——我无法从一个表中获取所有行 SELECT
查询。
实际上,我将查询阶段放在 solr/conf/data-config.xml 中,就像这样作为测试;它只有一张表,我正在选择所有行。
我使用 Solr(基于 Java)。然后我像这样触发数据索引:
curl --max-time 36000 -i localhost:portNum/solr/dataimport?command=full-import
这是 XML 中的内容:
<entity name="file" query="SELECT *, LOWER(REPLACE(sw_name, ' ', '')) packed_sw_name, CAST(group_id as char) group_id_s FROM tblTmp1"/>
但是现在,我想获取用于数据导入的表编号 (tblNum) 的参数,并迭代地选择 id 范围之间的行——使用美元符号变量替换,查询将如下所示:
<entity name="file" query="SELECT *, LOWER(REPLACE(sw_name, ' ', '')) packed_sw_name, CAST(group_id as char) group_id_s FROM tblTmp1_
$tblNum where id >=
$startSn and id<
$endSn " />
如何迭代查询数据库,应该在哪个文件中设置?
最佳答案
如果您想添加那种逻辑,我不知道这是否是编写 SQL 查询的最佳位置。
如果您确实按照配置使用导入程序,您将希望使用游标在循环中进行选择——将结果放入 Solr 的临时表中。我不知道它是如何使用 MySQL 语法的,但我记得它与其他 SQL 方言相似(但不相同)——这里是 PostgreSQL 的 PL/PgSQL 语言中的游标查询示例:
CREATE FUNCTION urge_to_merge( ) RETURNS INTEGER AS '
DECLARE
pacman CURSOR FOR SELECT * FROM forsale_fsuserprofileimage;
pellet forsale_fsuserprofileimage%ROWTYPE;
BEGIN
OPEN pacman;
LOOP
FETCH pacman INTO pellet;
EXIT WHEN NOT FOUND;
UPDATE forsale_fsuserprofile
SET
image = pellet.image,
w = pellet.w,
h = pellet.h
WHERE
id = pellet.userprofile_id;
END LOOP;
RETURN( 1 );
END;
' LANGUAGE 'plpgsql';
我建议放弃 Solr 股票数据导入器并编写一个简单的 CLI 程序——这样,您可以控制何时执行查询。您可以用 Java 编写它,但您不必这样做;使用 Solr 的 HTTP API,您可以使用任何其他语言,只要它可以发出 HTTP 请求和 MySQL API 调用:Python、Ruby、带 curl 的 bash 脚本,如果您喜欢,甚至可以使用 PHP-CLI。
许多语言已经绑定(bind)到 Solr 的 HTTP API,您可以开箱即用(我可以在这方面为 Python 和 Ruby 担保),但这里有一篇文章,其中包含一些示例,说明您自己使用 API 是多么容易: https://lucene.apache.org/solr/guide/7_7/searching.html#searching
关于mysql - 我如何从 Solr 的数据导入器中迭代查询大型 MySQL 数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10601704/
我是一名优秀的程序员,十分优秀!