【发布时间】:2017-08-19 09:51:33
【问题描述】:
MySql 中的结构(为了紧凑,我使用简化的符号)
表示法:表名->[column1(key or index), column2, ...]
documents->[doc_id(primary key), title, description]
elements->[element_id(primary key), doc_id(index), title, description]
每个文档可以包含大量元素(1 到 100k+ 之间)
我们有两个关键要求:
- 快速加载给定 doc_id 的所有元素
- 通过 element_id 快速更新单个元素的值
Cassandra 中的结构
第一种解决方案
documents->[doc_id(primary key), title, description, elements] (elements could be a SET or a TEXT, each time new elements are added (they are never removed) we would append it to this column)
elements->[element_id(primary key), title, description]
要加载我们需要的文档:
使用给定加载文档并获取所有元素 ID:SELECT * from documents where doc_id='id'
加载具有给定 ID 的所有元素:SELECT * FROM elements where element_id IN(从查询 a 加载的 ID)
更新元素将通过它们的主键来完成。
第二个解决方案
documents->[doc_id(primary key), title, description]
elements->[element_id(primary key), doc_id(secondary index), title, description]
要加载我们需要的文档:
- SELECT * from elements where doc_id='id'
更新元素将通过它们的主键来完成。
关于我们的解决方案的问题:
-
1st:在elements表中查询100k+个主键会不会很高效?
SELECT * FROM elements WHERE element_id IN (element_id1,.... element_id100K+)? 第二个:仅通过二级索引进行查询是否有效?
谁能给我们如何为我们的用例创建模型的建议?
【问题讨论】: