2016-04-18 3 views
1

Представьте таблицу с столбцов, где большинство данных в записи строки равно null. Один из столбцов - это идентификатор, и этот идентификатор известен заранее.Моделирование стола Кассандры

select id,SomeRandomColumn 
from LotsOfColumnsTable 
where id = 92e72b9e-7507-4c83-9207-c357df57b318; 

SomeRandomColumn - один из тысяч, и в большинстве случаев единственный столбец с данными. SomeRandomColumn NOT Известный аванс как тот, который содержит данные.

  1. Есть ли запрос CQL, который может сделать что-то вроде этого.

    select {Only Columns with data} 
    from LotsOfColumnsTable 
    where id = 92e72b9e-7507-4c83-9207-c357df57b318; 
    
  2. Я думал положить в колонке «подсказка», что указывает на столбец с данными, но чувствует себя не так, если не является CQL запрос, который выглядит, как это с одним запросом;

    select ColumnHint.{DataColumnName} 
    from LotsOfColumnsTable 
    where id = 92e72b9e-7507-4c83-9207-c357df57b318; 
    

В MongoDB я бы просто иметь коллекцию, и документ я вернулся бы «Type» атрибут, описывающий данные. Поэтому, возможно, мой реальный вопрос - как воспроизвести то, что я могу сделать с MondoDB в Кассандре. Моей поездкой Cassandra пока является создание UDT для каждого уникального документа, а затем изменение таблицы для добавления этого нового UDT в качестве столбца. Моя стартовая таблица выглядит так, где ColumnDataName - это подсказка;

CREATE TABLE IF NOT EXISTS WideProductInstance (
    Id uuid, 
    ColumnDataName text 
    PRIMARY KEY (Id) 
); 

Благодаря

+0

Кассандры не понятие нулевых значений. Если у вас пустой столбец в строке, он пуст. Вы можете выполнить SELECT *. Кассандра вернет только существующие данные. Я не понимаю, зачем вам нужно больше? –

ответ

1

Есть CQL запрос, который может сделать что-то вроде этого.

select {Only Columns with data}
from LotsOfColumnsTable
where id = 92e72b9e-7507-4c83-9207-c357df57b318;

Нет, вы не можете сделать это. И это довольно легко объяснить. Чтобы иметь возможность знать, что столбец содержит данные, Кассандре необходимо будет читать. И если он должен прочитать данные, так как усилия уже потрачены на диск, он просто вернет эти данные клиенту.

только экономии вы получите, если Cassandra был способен отфильтровывать нулевой Колонку от пропускной способности сети ...

Я думал положить в колонке «подсказка», что указывает на столбец с данными, но это кажется неправильным, если нет запроса CQL, который выглядит примерно так с одним запросом;

Ваша идея состоит в том, чтобы хранить в другой таблице список всех столбцов, которые фактически содержат реальные данные, а не null. Это звучит как JOIN, который плохой и не поддерживается. И если вам нужно прочитать эту справочную таблицу перед чтением оригинальной таблицы, вам придется читать во многих местах, и это будет дорого.

Так что, возможно, мой реальный вопрос: как воспроизвести то, что я могу сделать с MondoDB в Кассандре.

Не пытайтесь повторности ту же особенность от Монго Кассандре. Две базы данных имеют принципиально другую архитектуру. Что вам нужно сделать, так это рассуждать о вашем функциональном прецеденте. «Как я могу получить данные из Кассандры?» и с этого момента создайте правильную модель данных. Модель данных Cassandra разработана по запросу.

Самый лучший совет для вас, чтобы посмотреть некоторые видео Cassandra Data Model (это бесплатно) в http://academy.datastax.com