2024-06-27 22:25:19 发布
网友
我正在创建一个非常大的反向索引项。你建议什么方法?在
首先
termId - > docId a doc2[locations],doc5[locations],doc12[locations] b doc5[locations],doc7[locations],doc4[locations]
秒
p.sLucene不是一个选择
正确的表设计取决于您计划如何使用数据。如果您计划按原样使用"doc2[locations],doc5[locations],doc12[locations]"这样的字符串而不进行任何进一步的后处理,那么您的First设计就可以了。在
"doc2[locations],doc5[locations],doc12[locations]"
First
但是,如果正如你的问题所暗示的那样,你有时可能想把doc2[locations],doc5[locations]等视为独立的实体,那么你绝对应该使用你的Second设计。在
doc2[locations]
doc5[locations]
Second
下面是一些用例,它们说明了Second设计为什么更好:
如果使用First并要求使用termID = a的所有文档,则 拿回来一根绳子 doc2[locations],doc5[locations],doc12[locations]那你呢 必须分开。在
termID = a
doc2[locations],doc5[locations],doc12[locations]
如果使用Second,则将每个doc作为一个单独的行。不许分裂!在
Second结构更方便。
或者,假设在某个时刻doc5[locations]发生了变化,您需要 更新您的表。如果使用First设计,则必须使用 一些相对复杂的MySQL string function来查找和替换包含它的所有行中的子字符串。(请注意,MySQL没有内置regex substitution。)
如果使用Second设计,则更新很容易:
UPDATE table SET docId = "newdoc5[locations]" where docId = "doc5[locations]"
正确的表设计取决于您计划如何使用数据。如果您计划按原样使用
"doc2[locations],doc5[locations],doc12[locations]"
这样的字符串而不进行任何进一步的后处理,那么您的First
设计就可以了。在但是,如果正如你的问题所暗示的那样,你有时可能想把
doc2[locations]
,doc5[locations]
等视为独立的实体,那么你绝对应该使用你的Second
设计。在下面是一些用例,它们说明了
Second
设计为什么更好:如果使用
First
并要求使用termID = a
的所有文档,则 拿回来一根绳子doc2[locations],doc5[locations],doc12[locations]
那你呢 必须分开。在如果使用Second,则将每个doc作为一个单独的行。不许分裂!在
Second
结构更方便。或者,假设在某个时刻
doc5[locations]
发生了变化,您需要 更新您的表。如果使用First
设计,则必须使用 一些相对复杂的MySQL string function来查找和替换包含它的所有行中的子字符串。(请注意,MySQL没有内置regex substitution。)如果使用
Second
设计,则更新很容易:相关问题 更多 >
编程相关推荐