Я искал разбиение на страницы в cassandra и нашел эту идеальную тему здесь: Разбиение на страницы результатов в Cassandra (CQL), причем этот ответ принят большинством людей. Но я хочу делать то же самое на нескольких компьютерах. Приведу пример ...
Проблема
Допустим, у меня есть три компьютера, подключенные к одной базе данных cassandra. Каждый компьютер хочет взять несколько строк из следующей таблицы:
CREATE TABLE IF NOT EXISTS lp_webmap.page (
domain_name1st text,
domain_name2nd text,
domain_name3rd text,
location text,
title text,
rank float,
updated timestamp,
PRIMARY KEY (
(domain_name1st, domain_name2nd, domain_name3rd), location
)
);
Каждый компьютер занимает несколько строк и выполняет за них трудоемкие вычисления. Для фиксированного ключа раздела (имя_домена1st, имя_домена2nd, имя_домена3rd) и другого ключа кластеризации (расположение) могут быть тысячи результатов.
И теперь возникает проблема ... как быстро заблокировать пару строк, когда компьютер1 работает на других компьютерах?
Неиспользуемое решение
В стандартном SQL я бы использовал что-то вроде этого:
CREATE TABLE IF NOT EXISTS lp_registry.page_lock (
domain_name1st text,
domain_name2nd text,
domain_name3rd text,
page_from int,
page_count int,
locked timestamp,
PRIMARY KEY (
(domain_name1st, domain_name2nd, domain_name3rd), locked, page_from
)
) WITH CLUSTERING ORDER BY (locked DESC);
Это позволило бы мне сделать следующее:
- Выберите первые 10 страниц на компьютере 1 и заблокируйте их (page_from = 1, page_count = 10)
- Быстро проверьте блокировки на двух других машинах и получите неиспользуемые страницы для расчетов.
- Принимайте и блокируйте большее количество страниц на более быстрых компьютерах
- Удалить все блокировки для данного ключа раздела после обработки всех страниц
Вопрос
Однако я не могу сделать LIMIT 20,10 в Cassandra, а также не могу сделать это, так как я хочу разбивать на страницы на разных компьютерах. Есть ли шанс, как быстро пролистать эти страницы?