Я работаю с Cassandra, и я ударил немного камнем преткновения. Для того, как мне нужно искать данные, я обнаружил, что первичный ключ Composite отлично работает для того, что мне нужно, но время вставки для записи в этой семействе колонок идет к собакам с этим, и я не совсем уверен, почему.Медленное время вставки с композитным основным ключом в Cassandra
Таблица Определение:
CREATE TABLE exampletable (
clientid int,
filledday int,
filledtime bigint,
id uuid,
...etc...
PRIMARY KEY (clientid, filledday, filledtime, id)
);
ClientID = Внутренний идентификатор клиента. fullday = количество дней с 01.01.1900. filltime = количество тиков того дня, когда была получена запись. id = A Guid.
Суточная и временная структура существует, потому что я должен иметь возможность фильтровать по дням легко и быстро.
Я знаю, что магазины Cassandra Column Families с составными первичными ключами совершенно по-разному. Насколько я понимаю, он сохранит все как новые столбцы от базовой строки основного компонента первичного ключа. Это причина, по которой вставки будут медленными? Когда я говорю «медленно», я имею в виду, что если у меня только первичный ключ на id, то вставка займет ~ 200 миллисекунд, а с составным первичным ключом (или любым его подмножеством, я попробовал просто clientid и id с тем же эффектом), это займет до 32 секунд для 1000 записей. Время выбора быстрее из таблицы составных клавиш, так как я должен применять вторичные индексы и использовать «ALLOW FILTERING», чтобы вернуть правильные записи со стандартной таблицей ключей (я знаю, что могу сделать это в коде, но проблема что я имею дело с некоторыми массивными наборами данных, и это не всегда будет практичным или возможным).
Я объявляю семейство колонок или первичный ключ неправильными в отношении того, что я пытаюсь сделать? Со всеми незарегистрированными, непервичными ключевыми столбцами таблица имеет ширину 37 столбцов, будет ли это проблемой? На данный момент я совершенно в тупике. Я не могу действительно найти что-либо о других, имеющих похожие проблемы.
Для примера запроса мне нужно иметь возможность делать такие вещи, как получить следующее: 1) Получить записи для клиента за день 2) Получить записи для клиента для даты и времени. Я использовал заполненный день и заполнил время главным образом потому, что моя база кода - .Net, и нет встроенной функции для тайм-аутов. У меня есть кое-что, поэтому я даю им попробовать.То, как я вижу проблему сейчас, заключается в том, что мне нужно найти ключевую структуру, которая позволяет мне делать эти запросы, не зная больше, чем клиент и время, но все же делит данные достаточно, чтобы не сделать медленную установку. Примечание. Наборы данных очень большие. – Bozarth
Я предлагаю использовать предложенную выше структуру и использовать TimeUUID с использованием клиентов [.NET, таких как fluentcassandra] (https://github.com/fluentcassandra/fluentcassandra). Чтобы избежать горячих точек вы можете легко просто добавить случайное число (из заданного диапазона, как 0-9) и образуют составной ключ раздела, как так: 'CREATE TABLE exampletable ( ClientId ИНТ ведро, внутр ID timeuuid , ... первичный ключ ((ClientID, ведро), идентификатор) ); ' ' выберите * из exampletable, где ClientID = 123 и ковш (0,1,2,3,4,5,6 , 7,8,9) и ts> minTimeuuid ('2013-06-18 00:00:01') и ts
omnibear