卡桑德拉中已删除的数据像鬼一样回来了

时间:2019-01-01 06:59:10

标签: cassandra nosql

我有一个3个节点的Cassandra集群(3.7),一个键空间

CREATE KEYSPACE demo WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '2'}  AND durable_writes = true;

一张桌子

CREATE TABLE tradingdate (key text,tradingdate date,PRIMARY KEY (key, tradingdate));

删除某行之类的一天

delete from tradingdate 
where key='tradingDay'and tradingdate='2018-12-31'

然后,当查询时,已删除的行将变为幽灵

select * from tradingdate 
where key='tradingDay'and tradingdate>'2018-12-27' limit 2;

     key        | tradingdate
    ------------+-------------
     tradingDay |  2018-12-28
     tradingDay |  2019-01-02


select * from tradingdate 
where key='tradingDay'and tradingdate<'2019-01-03' 
order by tradingdate desc limit 2;

     key        | tradingdate
    ------------+-------------
     tradingDay |  2019-01-02
     tradingDay |  2018-12-31

因此,当使用order by时,已删除的行(tradingDay,2018-12-31)会返回。

我想我只删除一个节点上的一行,但是它仍然存在于另一节点上。所以我执行:

nodetool repair demo tradingdate

在3个节点上,则删除的行完全消失

所以我想知道为什么使用order by,我可以看到幻影行。

1 个答案:

答案 0 :(得分:0)

这是有关Cassandra(以及其他分布式系统)中删除操作的一些好读物:

http://thelastpickle.com/blog/2016/07/27/about-deletes-and-tombstones.html

以及:

https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlAboutDeletes.html

您将需要在gc_grace_seconds内至少运行/安排一次例行修复,默认为10天,以防止数据重新出现在群集中。

此外,如果您的节点之一缺少删除(和其他消息),您还应该查找已丢弃的消息:

# nodetool tpstats
Pool Name                    Active   Pending      Completed   Blocked  All time blocked
MutationStage                     0         0      787032744         0                 0
ReadStage                         0         0     1627843193         0                 0
RequestResponseStage              0         0     2257452312         0                 0
ReadRepairStage                   0         0       99910415         0                 0
CounterMutationStage              0         0              0         0                 0
HintedHandoff                     0         0           1582         0                 0
MiscStage                         0         0              0         0                 0
CompactionExecutor                0         0        6649458         0                 0
MemtableReclaimMemory             0         0          17987         0                 0
PendingRangeCalculator            0         0             46         0                 0
GossipStage                       0         0       22766295         0                 0
MigrationStage                    0         0              8         0                 0
MemtablePostFlush                 0         0         127844         0                 0
ValidationExecutor                0         0              0         0                 0
Sampler                           0         0              0         0                 0
MemtableFlushWriter               0         0          17851         0                 0
InternalResponseStage             0         0           8669         0                 0
AntiEntropyStage                  0         0              0         0                 0
CacheCleanupExecutor              0         0              0         0                 0
Native-Transport-Requests         0         0      631966060         0                19

Message type           Dropped
READ                         0
RANGE_SLICE                  0
_TRACE                       0
MUTATION                     0
COUNTER_MUTATION             0
REQUEST_RESPONSE             0
PAGED_RANGE                  0
READ_REPAIR                  0

丢弃的消息表明出了点问题。