2015-08-06 4 views
1

Reading before writing параграф из спецификации cassandra сообщает, что чтение перед записью оказывает небольшое влияние на производительность cassandra. Но говорит, что сама кассандра избегает чтения перед сценариями записи.Следует ли использовать cassandra для чтения перед написанием сценариев?

В моем случае мне нужно прочитать строку «см.» На ней и зависеть от условий записать ее обратно. Итак, в общей сложности кассандра является подходящим решением для таких сценариев или нет?

ответ

1

В вашем примере использования ничего нет, что указывает на то, что Cassandra не будет хорошей технологией для использования, но это зависит от вашего отношения чтения/записи.

Если у вас будет высокий коэффициент чтения/записи (т. Е. Если ваши условия обычно являются ложными, и вам редко приходится писать назад), важно рассмотреть стратегию уплотнения. Прочтите when to use levelled compaction from DataStax за советом по использованию стратегии уплотнения.

Термин «читать перед записью» в вашей ссылке на механизм хранения данных означает операции чтения, которые Cassandra должен выполнять на диске, как часть завершения «записи» запроса от клиента. Это не означает ваш сценарий отправки клиентом запроса на чтение с последующим запросом на запись.

Если у вас будет коэффициент чтения/записи, близкий к 1, вы сможете получить намного лучшую производительность из Cassandra, если можете изменить свою модель данных, чтобы избежать этого шаблона выполнения прочитанного запроса до записи запрос.

Если после учета всего вашего другого использования одного и того же кластера у вас будет низкий коэффициент чтения/записи (гораздо больше записей, чем чтение), тогда Кассандра очень хороша в этом, и вам, вероятно, не нужно беспокоиться.

5

Считается, что прежде всего запись считается анти-шаблоном в Кассандре из-за проблем с согласованностью. Производительность также может пострадать, но, что еще важнее, никогда не будет безопасно модифицировать данные на основе предыдущих чтений, поскольку эти значения могут быть изменены тем временем другим процессом. Страница storage engine на самом деле объясняет это довольно хорошо.

Вместо этого вы можете использовать операции CAS или так называемые «light weight transactions». Каждое обновление CAS будет основываться на условии, например. предыдущее значение. Это позволит убедиться, что обновления будут применяться только в том случае, если соответствующие части строки не изменились. Хотя LWT должен работать нормально, масштабируемость и производительность будут намного хуже, чем регулярные обновления.