Database design 论坛型应用的Cassandra数据模型
我正在为论坛类型的应用程序设计一个数据库。我正在考虑使用Cassandra(我将拥有大量的数据,因此RDBMS可能不是一个可行的选择),但仍停留在如何设计数据库上。主要功能是搜索,即搜索关键字,所有带有该关键字的帖子都将被返回。搜索也可以根据用户的某些特征进行,例如声誉、地理位置等 到目前为止,我的想法是:Database design 论坛型应用的Cassandra数据模型,database-design,cassandra,Database Design,Cassandra,我正在为论坛类型的应用程序设计一个数据库。我正在考虑使用Cassandra(我将拥有大量的数据,因此RDBMS可能不是一个可行的选择),但仍停留在如何设计数据库上。主要功能是搜索,即搜索关键字,所有带有该关键字的帖子都将被返回。搜索也可以根据用户的某些特征进行,例如声誉、地理位置等 到目前为止,我的想法是: 主键:日期和所有其他可搜索特征的组合,例如地理、声誉等,除了帖子中的单词,以便可以轻松搜索所有其他特征 二级索引:将所有单词放在单独的列中,并使它们成为二级索引,以便搜索“关键字”,我可以做
其中col1=关键字或col2=关键字…
当您对查询有了想法时,Cassandra最有效。您可以根据这些查询创建物理数据模型。在所有内容上搜索所有内容都应该留待搜索解决方案。确定您的查询并将这些信息保存在cassandra中。使用Solr或ElasticSearch进行任意搜索。在Cassandra中定义模式对于了解要执行的查询非常重要 1-由X个字段组成的主键并不意味着您可以查询主键的任何字段。如果你定义
PRIMARY KEY(reputation, geography, category)
使用这样一个键,您无法查询类别,除非您同时了解声誉和地理位置。除非你了解声誉,否则你不能查询地理信息。因此,从左向右读取,您可以将字段置于中的位置
select * from abc where reputation = 'good';
select * from abc where reputation = 'good' and geography = 'usa';
select * from abc where reputation = 'good' and geography = 'usa' and category='pizza';
不允许任何其他组合。要在cassandra中解决这个问题,您应该进行非规范化,将数据放入不同的表中。例如,3个表有3个不同的主键
table info_by_category ... PRIMARY KEY(category, geography, reputation)
table info_by_reputation ... PRIMARY KEY(reputation, category, geography)
table info_by_geography PRIMARY KEY(geography, reputation, category)
现在,您应该根据where条件选择要查询的表。如果您有声誉和地理位置,则应按地理位置查询表info\u
,如果您有地理位置和类别,则应按类别转到info\u
2-Cassandra不适合执行全文搜索:要完成这项工作,你应该在数据库旁边使用全文搜索引擎(如solr/elasticsearch/Whateveryou)。此外,即使放置了许多查找索引(以前是次要的idex),也不能将它们与和运算符组合。许多L.I.是一种不受欢迎的行为——如果你不能使用全文搜索,我宁愿使用地图,在地图值上放一个二级索引。尽管如此,您仍然无法使用和
运算符搜索不同的单词
3-可以使用L.I.轻松完成
嗯,卡洛