【问题标题】:Updated data still persist in CQL table更新的数据仍保留在 CQL 表中
【发布时间】:2015-05-06 13:17:28
【问题描述】:

我使用 CQL 创建了一个以 SET 作为列的表。

CREATE TABLE z_test.activity_follow (
    activity_type_id text,
    error_message text,
    error_type text,
    file text,
    line_no text,
    project_api_key text,
    project_name text,
    project_party_id text,
    release_stage_id text,
    stage_name text,
    project_type_name text,
    activity_type_name text,
    account_id text,
    created_at text,
    secure_url text,
    error_count text,
    user_id set<text>,
    PRIMARY KEY (activity_type_id,error_message,error_type,file,line_no,project_api_key,project_name,project_party_id,release_stage_id,stage_name,project_type_name,activity_type_name,account_id,created_at,secure_url)
);

z_test 是我的密钥空间。 然后我使用以下查询将一个值插入到表中,

UPDATE z_test.activity_follow SET user_id = user_id + {'46'} , error_count = '4' 
                               WHERE  activity_type_id = '1'
                                         AND error_message = '1'
                                         AND error_type = '1'
                                         AND FILE = '1'
                                         AND line_no = '1'
                                         AND project_api_key = '1'
                                         AND project_name = '1'
                                         AND project_party_id = '1'
                                         AND release_stage_id = '1'
                                         AND stage_name = '1'
                                         AND project_type_name = '1'
                                         AND activity_type_name = '1'
                                         AND account_id = '1'
                                         AND secure_url = '1'
                                         AND created_at = '1'




UPDATE z_test.activity_follow SET user_id = user_id + {'464'} , error_count = '4'
                               WHERE  activity_type_id = '1'
                                         AND error_message = '1'
                                         AND error_type = '1'
                                         AND FILE = '1'
                                         AND line_no = '1'
                                         AND project_api_key = '1'
                                         AND project_name = '1'
                                         AND project_party_id = '1'
                                         AND release_stage_id = '1'
                                         AND stage_name = '1'
                                         AND project_type_name = '1'
                                         AND activity_type_name = '1'
                                         AND account_id = '1'
                                         AND secure_url = '1'
                                         AND created_at = '1'

值已成功插入。我使用了以下选择语句,

SELECT * FROM z_test.users WHERE emails CONTAINS 'test@mail.com';

我得到了以下结果,

 activity_type_id | error_message                      | error_type     | file                                                               | line_no | project_api_key                      | project_name             | project_party_id | release_stage_id | stage_name  | project_type_name | activity_type_name | account_id | created_at          | secure_url                                      | error_count | user_id
------------------+------------------------------------+----------------+--------------------------------------------------------------------+---------+--------------------------------------+--------------------------+------------------+------------------+-------------+-------------------+--------------------+------------+---------------------+-------------------------------------------------+-------------+---------
                1 | alebvevcbvghhgrt123 is not defined | ReferenceError | http://localhost/ems-sdk/netspective_ems_js/example/automatic.html |      19 | 8aec5ce3-e924-3090-9bfe-57a440feba5f | Prescribewell-citrus-123 |               48 |                4 | Development |               Php |          exception |         47 | 2015-03-03 04:04:23 | PRE-EX-429c3daae9c108dffec32f113b9ca9cff1bb0468 |           1 |  {'464'}

然后我从表格中删除了一封电子邮件,

UPDATE z_test.activity_follow SET user_id = user_id - {'46'} , error_count = '4' 
                               WHERE  activity_type_id = '1'
                                         AND error_message = '1'
                                         AND error_type = '1'
                                         AND FILE = '1'
                                         AND line_no = '1'
                                         AND project_api_key = '1'
                                         AND project_name = '1'
                                         AND project_party_id = '1'
                                         AND release_stage_id = '1'
                                         AND stage_name = '1'
                                         AND project_type_name = '1'
                                         AND activity_type_name = '1'
                                         AND account_id = '1'
                                         AND secure_url = '1'
                                         AND created_at = '1'

现在当我使用上面的查询时,

SELECT * FROM z_test.activity_follow WHERE user_id CONTAINS '46';

它仍然返回该行,

   activity_type_id | error_message                      | error_type     | file                                                               | line_no | project_api_key                      | project_name             | project_party_id | release_stage_id | stage_name  | project_type_name | activity_type_name | account_id | created_at          | secure_url                                      | error_count | user_id
------------------+------------------------------------+----------------+--------------------------------------------------------------------+---------+--------------------------------------+--------------------------+------------------+------------------+-------------+-------------------+--------------------+------------+---------------------+-------------------------------------------------+-------------+---------
                1 | alebvevcbvghhgrt123 is not defined | ReferenceError | http://localhost/ems-sdk/netspective_ems_js/example/automatic.html |      19 | 8aec5ce3-e924-3090-9bfe-57a440feba5f | Prescribewell-citrus-123 |               48 |                4 | Development |               Php |          exception |         47 | 2015-03-03 04:04:23 | PRE-EX-429c3daae9c108dffec32f113b9ca9cff1bb0468 |           1 |  {'464'}

为什么我会出现这种行为?在 CQL 中是预期的吗?如果我可以删除这个如何?我已将每个值都设为 1 进行测试,我也尝试了其他值。

【问题讨论】:

  • 无法在本地重现该案例。您似乎也错过了描述中的创建索引步骤。你能设置“跟踪”吗?在 cqlsh 中,再次运行 select 并粘贴结果?
  • 这对我也有用。我的猜测是在您上次更新期间发生了一些事情,导致索引没有更新。试试nodetool rebuild_index &lt;keyspacename&gt; &lt;tablename&gt; (&lt;optionalindexname&gt;) 看看是否有帮助。

标签: cassandra bigdata cql3


【解决方案1】:

您使用什么客户端来执行 CQL 语句?这都是在 cqlsh 中完成的还是其他的?

这只是一个黑暗的猜测,但是如果您快速运行两个匹配相同主键的 CQL 语句,则它们可能在 cassandra 中被赋予相同的写入时间,这意味着其中一个突变将被忽略.

见:Cassandra: Writes after setting a column to null are lost randomly. Is this a bug, or I am doing something wrong?

如果您正在运行 Cassandra 2.1.2+,那么如果在同一毫秒内有写入/更新,cassandra 现在将打破平局 (CASSANDRA-6123)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2020-11-18
    • 1970-01-01
    • 2019-01-25
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多