Учитывая знание от previous question you posted, где я сказал, индекс замедляя запроса вам нужно решить две вещи:
- Написать статью только если он уже не существует
- Query статьи, основанной на источник и диапазон запросе на созданной в
основываясь на этих два я бы с двумя таблицами:
Обратный индекс таблицы
CREATE TABLE article_by_id (
id text,
source text,
created_at timestamp,
PRIMARY KEY (id)) WITH comment = 'Article by id.';
Эта таблица будет использоваться для вставки статьи, когда они впервые приходят. Основываясь на возврате после INSERT ... IF NOT EXISTS
, вы узнаете, существует ли статья или нет, и если она новая, вы будете писать во вторую таблицу. Также эта таблица может служить для поиска всех ключевых частей для второй таблицы на основе идентификатора статьи. Если вам нужны полные данные о статье, вы можете добавить в эту таблицу также все поля (категория, канал и т. Д.). Это будет тощий ряд, содержащий только одну статью в одном разделе.
Пример вставки:
INSERT INTO article_by_id(id, source, created_at) VALUES (%s,%s, %s) IF NOT EXISTS;
драйвер возвращает Java, истинным или ложным, был ли применен этот запрос или нет. Вероятно, он такой же в драйвере python, но я его не использовал.
Таблица для запросов по диапазону и запросов по источникам
Как doanduyhai предложил создать вторую таблицу:
CREATE TABLE articles (
id text,
source text,
created_at timestamp,
category text,
channel text,
last_crawled timestamp,
text text,
thumbnail text,
title text,
url text,
PRIMARY KEY ((source),created_at, id)
)
В этой таблице вы будете писать только тогда, когда первый ВСТАВИТЬ возвращается истинный смысл у вас есть новый статья, не существующая. Эта таблица будет обслуживать запросы и запросы диапазона по источникам.
рационализаторское предложение
Используя timeuuid
вместо timestamp
для created_at
вы уверены, что не две статьи не может иметь такой же created_at и вы можете потерять id
все вместе и полагаться на timeuuid
. Однако из второго вопроса я вижу, что вы полагаетесь на внешний идентификатор, поэтому хотели бы упомянуть об этом как о побочном эффекте.
Это все еще зависит от того, сколько источников источника может иметь и сколько записей будет вставлено. –
Без обид для Джей Пател; эта статья была * отлично * для своего времени и помогла создать основу для обучения разработчиков на правильном моделировании данных Cassandra. Но это почти 4 года, и не так важно, как когда-то (Кассандра изменила * много * в то время). – Aaron
@Aaron Спасибо за ответ. Я добавил, что редактирование нашего сообщения было бы здорово, если бы вы могли предложить что-то, потому что предлагаемое вами решение похоже на то, что мы делаем сейчас, но наша система все еще очень медленная. – peter