2015-04-07 2 views
2

Я изучаю Кассандру более 2 недель, чтобы иметь полное представление о том же. Я прочитал почти всю паутину о Кассандре и до сих пор не понял некоторых концепций. Ниже приведены следующие: -Проблемы с синхронизацией данных Cassandra

Согласно документации: - Мы моделируем наши семьи колонн согласно нашим запросам. Следовательно, нам нужно знать наши запросы заранее, что совсем не возможно в сценарии реального мира. У нас может быть определенный набор запросов, которые все время меняются со временем. Следовательно, если бы я разработал модель, основанную на моих предыдущих запросах, то после появления нового требования я должен перепроектировать модель. И как прочитано над одной нитью SO Очень сложно исправить плохую модель данных Cassandra в будущем. Для Eg: - Я бы а user модели, имеющие поля сказать

name, age,phone,imei,address, state,city,registration_type, created_at

В настоящее время, мне нужно фильтровать (позволяет говорить) только state. Я сделаю ПК как state. Позволяет назвать модель UserByState. Теперь через 2-3 месяца я пришел с требованием фильтрации по created_at. Теперь я создам модель UserByCreatedAt с ПК как created_at.

Сейчас есть 2 проблемы: -

а) Если я создаю новую модель, когда требование приходит, то мне нужно перенести данные в новую модель, т.е. если я создаю новую модель, я необходимо также иметь предыдущие данные в текущей модели. Поэтому мне нужно перенести данные с UserByState на UserByCreatedAt, то есть мне нужно написать сценарий для копирования данных с UserByState в UserByCreatedAt. Исправьте меня, если я ошибаюсь !!!

Если возникает другое новое требование фильтрации, я буду создавать новые модели, а затем переносить и так далее.

b) Для создания моделей перед обработкой в ​​соответствии с запросами мне необходимо синхронизировать данные, то есть в приведенном выше примере «Пользователи», я создал 2 модели для 2 запросов.

UserByState и UserByCreatedAt

Так что мне нужно применить 2 разных запросов записи ??, т.е.

UserByState.create(row = value,......) 
UserByCreatedAt.create(row = value,......) 

И если я имею другие модели, такие как 'UserByGender' и так далее. мне нужно применять разные запросы на запись к разным моделям MANUALLY или это происходит само по себе ??? Возникает проблема сохранения данных в синхронизации.

ответ

1

В распределенных системах нет бесплатного обеда, и вы нанесли некоторые ключевые ограничения на голову.

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

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

Для перемещения данных из старой таблицы в новую Hadoop/Spark - хорошие варианты. Это пакетные системы, поэтому они не будут обеспечивать низкую задержку, но отлично подходят для однократных сеансов, таких как восстановление таблицы с помощью нового индекса и операций cronjob.