2015-02-05 2 views
3

Мое понимание того, что строки перезаписываются, когда вставлена ​​другая строка с идентичными первичными ключами.Когда строки перезаписаны в cassandra

Например:

У меня есть столбцы (user_id int, item_id int, site_id int), и мой PRIMARY KEY(user_id, item_id)

Если бы я имел следующую таблицу:

user_id, item_id, site_id 
    2  3  4 

и я вставить user_id : 2, item_id : 3, site_id : 10, моя новая таблица будет:

user_id, item_id, site_id 
    2  3  10 

не

user_id, item_id, site_id 
    2  3  4 
    2  3  10 

Это простой случай в любом случае? Есть ли какие-то тонкости, которые я, вероятно, не знаю? Кроме того, я не мог найти это в документах и ​​пришел к такому выводу, играя с кассандрой, может ли кто-нибудь предоставить источник документа?

+1

Это задокументировано в разных местах. Я googled и нашел это: http://www.opencredo.com/2014/01/06/new-features-in-cassandra-2-0-lightweight-transactions-on-insert/. Он включает описание перезаписи. –

ответ

9

Да, именно так Кассандра предназначена для работы. Во всех случаях, когда выполняется UPDATE или INSERT, данные будут обновляться (на основе ключей), если они существуют, и вставлять их нет. Важно помнить, что под капотом UPDATE и INSERT являются синонимами. Если вы думаете о том, что эти два являются одинаковыми, тогда вы можете начать понимать, почему он работает так, как он.

Как вы говорите, вы правы, поскольку вам нужно присмотреться, чтобы найти явную ссылку на это поведение в документации. Я нашел ближайшие ссылки в документации и перечислил их ниже:

Из документации UPDATE:

Строки создается, если никто не существовал раньше, и обновляться в противном случае. Укажите строку для обновления в предложении WHERE, включив все столбцы, составляющие ключ раздела. ... Операция UPDATE SET недействительна в поле первичного ключа.

Из документации INSERT:

Вы не должны определить все столбцы, за исключением тех, которые составляют ключ. ... Если столбец существует, он обновляется. Строка создается, если она не существует.

Теперь в то время как эти отрывки не могут прийти прямо и сказать «быть осторожным, чтобы не перезаписать», мне удалось найти статью на планете Кассандрой, которая была более явной: How to Do an Upsert in Cassandra

Cassandra является распределенной базы данных, которая позволяет избежать чтения перед записью, поэтому INSERT или UPDATE задают указанные вами значения столбцов независимо от того, существует ли эта строка. Это означает, что вставки могут обновлять существующие строки, а обновления могут создавать новые строки. Это также означает, что легко случайно перезаписать существующие данные, поэтому имейте это в виду.

Смежные вопросы