2016-02-08 3 views
1

Я просто перешел на Кассандре и у меня есть такие элементы для модели:Cassandra модель базы данных

1.House - Here is its view который имеет 2. city, 3. zip и 4. property type

Я также необходимо all cities view, и мне нужны все типы свойств и почтовые индексы для завершения поисковой формы (еще не реализованы).

Насколько я знаю, я должен создать 4 таблицы и сделать Первичные ключи ... «внешние ключи», не так ли?

У меня также небольшой запрос - как и Гарри Трумэн. «Дайте мне однорукий экономист», - потребовал разочарованный американский президент. «Все мои экономисты говорят,« с одной стороны ... с другой »:-).

У меня недостаточно опыта работы с Cassandra, чтобы сделать выбор, если я получу «или вы можете сделать так или иначе», поэтому просто дайте мне 1 лучшую схему, и я ее реализую.

Спасибо

ответ

0

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

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

В Cassandra вы хотите использовать подход, основанный на запросе. Иногда это может означать одну таблицу для каждого запроса. Имея это в виду, я слышу, что вы должны запросить свои свойства двумя способами: (? MLS)

  • Под «дом»
  • По городу

По существу, вы должны иметь стол для обслуживания каждого из этих запросов:

CREATE TABLE housesbymls (
    mls text, 
    city text, 
    price bigint, 
    propertytype text, 
    state text, 
    street text, 
    year bigint, 
    zip text, 
    PRIMARY KEY (mls)); 

CREATE TABLE housesByCity (
    mls text, 
    street text, 
    city text, 
    state text, 
    zip text, 
    propertyType text, 
    price bigint, 
    year bigint, 
    PRIMARY KEY ((state,city),zip,mls)); 

После upserting некоторых данных, я могу запросить по MLS:

[email protected]:stackoverflow> SELECT * FROM housesByMLS WHERE mls='09110857'; 

mls  | city  | price | propertytype  | state | street       | year | zip 
----------+----------+--------+------------------+-------+--------------------------------+------+------- 
09110857 | Palatine | 104900 | Condominium Unit | IL | 1025 North Serling Avenue, 211 | 1978 | 60067 

(1 rows) 

И я могу запросить государственным/города или штата/Город/Почтовый индекс:

[email protected]:stackoverflow> SELECT * FROM housesByCity 
    WHERE state='IL' AND city='Palatine'; 

или:

[email protected]:stackoverflow> SELECT * FROM housesByCity 
    WHERE state='IL' AND city='Palatine' AND zip='60067'; 

Оба эти возвращения:

state | city  | zip | mls  | price | propertytype  | street       | year 
-------+----------+-------+----------+--------+------------------+--------------------------------+------ 
    IL | Palatine | 60067 | 09110857 | 104900 | Condominium Unit | 1025 North Serling Avenue, 211 | 1978 

(1 rows) 

Идея позади структура PRIMARY KEY на этом состоит в том, что state и city составляют ключ разделения (который помогает Cass andra выясняет, где поставить эту строку в кластере), поэтому они оба требуются. Затем, поскольку города могут иметь несколько кодов zip, вы также можете сфокусировать свой запрос на этом.ПЕРВЫЕ КЛЮЧИ в Кассандре уникальны, поэтому я положил mls на конец, чтобы обеспечить уникальность.

+0

Спасибо SOO много, Аарон за ваш блестящий и всеобъемлющий ответ. Это именно то, что мне нужно, я уже поступил неправильно. Мне нужно некоторое время, чтобы прочитать ваш ответ по строчке ... – Svitlana

+0

@Svitlana Glad Я мог бы помочь! Другое сообщение о SO, которое может вам помочь, - это ответ Карло о различных типах ключей в Cassandra и их использовании: http://stackoverflow.com/questions/24949676/difference-between-partition-key-composite-key- and-clustering-key-in-cassandra/24953331 # 24953331 – Aaron

+0

Спасибо, Аарон. Попробует прочитать и понять перед реализацией :-). Клиенты всегда хотят, чтобы это было сделано завтра, и обычно мне нужно сделать это дважды :-). Благодарю вас за ваше время, Аарон! – Svitlana

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