【问题标题】:Boolean in CassandraCassandra 中的布尔值
【发布时间】:2019-03-08 18:08:08
【问题描述】:

我发现 Cassandra 布尔数据类型存在问题,

我有一个表,其中一个字段为布尔值

CREATE TABLE keyspace.issuetable (
    "partitionId" text,
    "name" text,
    "field" text,
    "testboolean" boolean,
    PRIMARY KEY ("partitionId", "name"));

现在当我尝试插入表格时,我没有添加布尔值“testboolean”

    INSERT into keyspace.issuetable("partitionId", "name", "field")
VALUES ('testpartition', 'cluster1_name','testfiled');

问题

1) 如果 INSERT 查询中的布尔条目(例如 testboolean 条目)未添加,则根据数据类型,它需要为“false”,但添加为 null

SELECT * FROM issuetable ;

 partitionId   | name          | field     | testboolean
---------------+---------------+-----------+-------------
 testpartition | cluster1_name | testfiled |        null

你能解释一下为什么吗?也让我知道解决这个问题的解决方案,我希望 'false' 不是 'null'

【问题讨论】:

    标签: cassandra cassandra-3.0


    【解决方案1】:

    Cassandra 与传统的 SQL 数据库不同。它不在表中存储行。考虑 Cassandra 数据模型的最佳方式是想象一个 sortedMap<rowKey, map<columnKey, value>>

    这意味着任何特定行不需要与任何其他行具有相同的字段/列。在您的示例中,插入的行只是没有名为testboolean 的属性。

    要了解更多信息,我建议您参考here。 不,您不能为列设置默认值(或者您只能在应用程序端进行设置)。

    【讨论】:

    • 为什么在 Cassandra 中有数据类型作为特性?如果我插入错误的数据类型,它会引发错误。为什么不将数据存储为像 Mongo 这样的对象(即任何数据类型)?
    • 使用类型化数据和表模式只是一个设计决策(您可以就 Postgres 或任何其他类型化数据库提出相同的问题)。在 3.0 之前,Cassandra 实际上确实支持无类型数据集,但是 3.0 中引入的新存储引擎不支持此功能。你可以阅读更多关于存储引擎的设计here
    • 贾斯汀所说的,我只能补充一点,定义模式可以在压缩和整体数据库性能方面进行多重优化。而且将 mongo 视为完全无模式的存储也不完全正确。如果您要使用 mongo 实现您在此处尝试的内容,如果您需要使用此类辅助字段进行查询,则必须定义架构和/或索引。
    猜你喜欢
    • 2011-04-13
    • 2015-04-14
    • 1970-01-01
    • 2017-07-14
    • 2017-04-08
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    相关资源
    最近更新 更多