- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这些表......
CREATE TABLE segmented_text (
id SERIAL PRIMARY KEY,
hash BYTEA NOT NULL UNIQUE,
text TEXT NOT NULL,
segmented JSONB
);
CREATE TABLE translations (
lang TEXT NOT NULL,
word TEXT NOT NULL,
engl TEXT NOT NULL,
PRIMARY KEY (lang, word)
);
“分段”字段中的 JSON 结构始终采用以下格式:
[ { "l":"it", "t":["aforismi", "un", "gatto", "migliora", "il", "muro", ...] },
{ "l":"fr", "t":["beaujolais", "bordeaux", "borgogna", "champagne", ...] },
... ]
客户端应用程序正在尝试扫描 segmented_text
以查找每种语言中尚未在 translations
表中包含条目的每个单词。它将在外部语言到英语词典服务中查找这些单词,并将结果插入到 translations
表中,基本上如下 (Python/psycopg2):
cur = db.cursor()
# see below
cur.execute("[get all the untranslated words]", (can_translate,))
engl = collections.defaultdict(dict)
for lang, word in cur:
if word not in english[lang]:
english[lang][word] = get_translation(lang, word)
for lang, words in english.items():
for word, engl in words.items():
cur.execute("INSERT INTO translations VALUES (%s, %s, %s)",
(lang, word, engl))
db.commit()
我的问题与“[获取所有未翻译的词]”查询有关。我一直在测试两种变体。 (查询参数 can_translate
是词典服务提供的所有语言代码的数组。)
此版本具有可接受的性能,扫描整个 segmented_text
表大约需要 10 分钟,但它似乎不正确。
SELECT w.lang, w.word
FROM (
SELECT DISTINCT
chunk->>'l' AS lang,
jsonb_array_elements_text(chunk->'t') AS word
FROM (
SELECT jsonb_array_elements(segmented) AS chunk
FROM segmented_text
WHERE segmented IS NOT NULL) _
WHERE chunk->>'l' = ANY(%s)) w
LEFT JOIN translations t ON w.lang = t.lang AND w.word = t.word
WHERE t.word IS NULL;
问题在于,大约每 200 个后续 INSERT 中就有一个会引发约束冲突,声称翻译表中已经存在对 (lang, word)。应用程序注意不要多次插入任何这样的对,所以一定是这个查询中的反连接以某种方式没有过滤掉所有已经翻译的单词。
我得到的唯一其他线索是此调整消除了问题——唯一的区别是 DISTINCT
修饰符的位置。但是,这样做的代价是完全不能接受的性能;扫描表格需要六个多小时。
SELECT DISTINCT w.lang, w.word
FROM (
SELECT
chunk->>'l' AS lang,
jsonb_array_elements_text(chunk->'t') AS word
FROM (
SELECT jsonb_array_elements(segmented) AS chunk
FROM segmented_text
WHERE segmented IS NOT NULL) _
WHERE chunk->>'l' = ANY(%s)) w
LEFT JOIN translations t ON w.lang = t.lang AND w.word = t.word
WHERE t.word IS NULL;
当我进行小规模抽查时,两个查询似乎 都在做正确的事情,但全面的操作肯定以某种方式搞砸了。 (为了了解问题的规模,80 种语言中约有 200,000 个单词需要翻译,translations
表中已有约 11,000,000 个单词。)
我可以掩盖插入端的问题,但字典服务会按每个单词收费,所以我宁愿修复初始查询,使其可靠地只返回尚未翻译的单词。
最佳答案
您的连接逻辑似乎很合理(假设该词声明为非空)所以我唯一能看到的可能是连接逻辑失败。要在值实际存在时发生这种情况,您可能必须处理查询第一部分中数据的类型(或内容)。您正在那里做一些花哨的 json 内容,结果可能不“等于”翻译表中的文本值。然后,当您插入它们时,它们会被强制/转换为正确的类型(如果您尚未处理)并匹配现有值。
当有 CHAR 类型与 VARCHAR 类型连接时,我见过这种情况。您可能想检查 JSON 中这些违规词中常见的可疑字符,例如空格或不可打印字符。
关于sql - 复杂的反连接显然返回表 2 中不为空的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34074033/
对包含as、bs、cs的字符串,我们可以进行如下操作。我们可以取任意两个相邻的不同字符并将它们替换为第三个。例如,“ab”被缩减为“c”,“ba”也是如此,依此类推。我编写这段代码是为了对 t 个字符
我得到了数据库检索字符串的不同哈希值和通过 html 表单提交的相同值。 我做错了什么? 数据库: SET NAMES utf8; SET foreign_key_checks = 0; SET ti
我正在继续那个加密程序,现在我正在为它开发 GUI。不过,我有一个奇怪的问题:在主菜单中,我有调用加密和解密子程序的按钮,但它们显然是在按下按钮之前执行的。 定义.py #!/usr/bin/env
我最近升级了 PyCharm(社区版)。如果重要的话,我正在 Mac OSX 机器上运行。升级后,我有一个项目,PyCharm 找不到任何 python 模块。它找不到 numpy,matplotli
我开始调整我的 spring boot 项目以使用 jpa/hibernate。在这个阶段,我只想检索 mysql 数据库中表的 id。 以下是相关类: @SpringBootApplication
我找不到任何类似的问题,我不知道那里会发生什么(也许可能是愚蠢的事情),但我还没有找到任何关于可能发生的事情的线索。 我有这个数组: const superVillains = [ { value
我正在使用 ExecutorService 解决使用生产者-消费者问题的事务轮询案例和 BlockingQueue .我有一个交易 list ,我想对其进行验证并采取行动。我得到一个新的交易来不断地验
注意这涉及 HTML 电子邮件编码(有限制) 例如,在我使用的 Mail Chimp 电子邮件模板中有这样的内容: 我猜他们是在覆盖基础,但什么时候应该使用 valign="top" 什么时候使用
我有一个名为 Component 的基类,它有许多派生自它的类。我希望每个类都有一个与之关联的整数(哪个组件获得什么值无关紧要,只要它们从 0 开始并且是连续的)。我不知道如何直接执行此操作,因此在与
我对 python 相当缺乏经验,所以我发现自己不知道如何解决这个错误。我继承了一个 python 应用程序,它主要只是将文件和文件夹从一个地方复制到另一个地方。所有文件和文件夹都在本地机器上,用户拥
我一生都无法弄清楚为什么它一直显示“无法找到显式 Activity 类 com.example.timer.beep。您是否在 Android list 中声明了该 Activity ?”。据我所知,
许多有关多处理使用的教程似乎并没有完全解决为什么下面的技术适用于线程但不适用于多处理。 为什么这不适用于多处理,以及我尝试要做的事情的实现是什么?谢谢! 线程实现(工作正常,对我来说很有意义): fr
我有一个非常奇怪的问题 - 我使用 firebase 验证自己的身份(通过电话并使用电子邮件/密码凭据链接帐户),并且它工作得很好(获取数据等)。 当应用程序(出于任何原因)对我崩溃时,我不断收到权限
在我的应用程序中(只显示相关代码),我有一个类 Test 有一个属性 var location: CLLocation 我使用 存档它 public func encode(with aCoder:
环境:我在装有 High Sierra 的 Mac 上使用 conda 4.6.7。 我有一些遗留的 Python 代码,首先我想运行它。当然,由于这是研究代码,我没想到会找到“花哨的东西 (!!)”
我看过很多关于这个主题的问题和答案,但似乎没有一个对我的情况有帮助。我的 PHP 代码成功创建了一个新的日志文件,但随后无法访问该文件以附加更多信息、关闭它等。 我正在将应用程序从本地 XAMPP 迁
我使用 000Webhost。 我刚刚在我的 MySQL 数据库中创建了一个表。 我遇到了这个错误: “mysql.proc 的列数错误。预期为 20,实际为 16。表可能已损坏”。 我的其他表工作正
以下查询: SELECT DISTINCT ClassName FROM SiteTree ORDER BY ClassName 没有明显的顺序返回! 无论我引用列/表名称,使用或不使用 DISTIN
我正在学习 mysql 中的存储过程和游标,我偶然发现了它: delimiter // CREATE PROCEDURE some_func() BEGIN DECLARE link_rewr
我正试着用“文本编码标准”来包装我的大脑。当将一堆字节解释为“文本”时,必须知道哪个“编码sheme”适用。我知道的可能的候选人: ascii:非常基本的编码方案,支持128个字符。 cp-1252:
我是一名优秀的程序员,十分优秀!