Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 论坛型应用的Cassandra数据模型_Database Design_Cassandra - Fatal编程技术网

Database design 论坛型应用的Cassandra数据模型

Database design 论坛型应用的Cassandra数据模型,database-design,cassandra,Database Design,Cassandra,我正在为论坛类型的应用程序设计一个数据库。我正在考虑使用Cassandra(我将拥有大量的数据,因此RDBMS可能不是一个可行的选择),但仍停留在如何设计数据库上。主要功能是搜索,即搜索关键字,所有带有该关键字的帖子都将被返回。搜索也可以根据用户的某些特征进行,例如声誉、地理位置等 到目前为止,我的想法是: 主键:日期和所有其他可搜索特征的组合,例如地理、声誉等,除了帖子中的单词,以便可以轻松搜索所有其他特征 二级索引:将所有单词放在单独的列中,并使它们成为二级索引,以便搜索“关键字”,我可以做

我正在为论坛类型的应用程序设计一个数据库。我正在考虑使用Cassandra(我将拥有大量的数据,因此RDBMS可能不是一个可行的选择),但仍停留在如何设计数据库上。主要功能是搜索,即搜索关键字,所有带有该关键字的帖子都将被返回。搜索也可以根据用户的某些特征进行,例如声誉、地理位置等

到目前为止,我的想法是:

  • 主键:日期和所有其他可搜索特征的组合,例如地理、声誉等,除了帖子中的单词,以便可以轻松搜索所有其他特征
  • 二级索引:将所有单词放在单独的列中,并使它们成为二级索引,以便搜索“关键字”,我可以做
    其中col1=关键字或col2=关键字…
  • 列名为消息发布后第二天的所有帖子(或列名为帖子ID)
  • 但我认为这确实是一种迂回的方式。还有更好的主意吗

    谢谢

  • 记住,仅仅因为你有很多集群列并不意味着你可以搜索它们。如果您的主键是(p、c1、c2、c3…),则要在c2上搜索,必须提供c1。要在c3上搜索,必须提供c1和c2

  • 二级索引很适合在分区内查找数据。如果您的查询是跨分区的,您将遇到恼人的麻烦


  • 当您对查询有了想法时,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.轻松完成

    嗯,卡洛