дизайн таблицы для хранения большого количества строк

Я пытаюсь сохранить в postgresql базе данных некоторые уникальные идентификаторы наряду с сайтом, на котором они были замечены. Я не могу действительно решить, какую из следующих 3 опций выбрать, чтобы быть быстрее и легкий удобный в сопровождении. Таблица должна была бы предоставить следующую информацию:

  • уникальный идентификатор, который, к сожалению, это - текст
  • сайты, на которых был замечен тот уникальный идентификатор

Объем данных, который должен был бы содержать, является довольно большим: существует приблизительно 22 миллиона уникальных идентификаторов, о которых я знаю.

Таким образом, я думал о следующих проектах таблицы:

  • идентификатор - целое число

    идентификатор - текст

    seen_on_site - целое число, внешний ключ к таблице сайтов

Этот подход потребовал бы приблизительно 22 миллиметров, умноженных на количество сайтов.

  • идентификатор - целое число

    идентификатор - текст

    seen_on_site_1 - булевская переменная

    seen_on_site_2 - булевская переменная

    ............

    seen_on_site_n - булевская переменная

Надо надеяться, количество сайтов не пойдет прошлые 10. Это потребовало бы только количества уникальных идентификаторов, о которых я знаю, который является приблизительно 20 миллионами, но оно мешало бы работать с ним с точки зрения ORM.

  • одна таблица, которая сохранила бы только уникальные идентификаторы, как в:

идентификатор - целое число

unique_identifier - текст,

одна таблица, которая сохранила бы только сайты, как в:

идентификатор - целое число

сайт - текст

и один многие многим отношение, как:

идентификатор - целое число,

unique_id - целое число (fk к идентификаторам хранения таблицы)

site_id - целое число (fk к таблице сайтов)

  • другой подход должен был бы иметь таблицу, которая хранит уникальные идентификаторы для каждого сайта

Так, который походит на лучший подход для взятия на длительном периоде?

1
задан hyperboreean 10 May 2010 в 10:12
поделиться

3 ответа

Есть две таблицы.
Таблица 1 Идентификатор сайта, Имя сайта, Описание сайта
Идентификатор сайта -> первичный ключ
Site Name -> Index

Таблица 2 будет той, о которой вы говорите.
Идентификатор строки, идентификатор сайта, любая информация.
Идентификатор строки —первичный ключ >
Идентификатор сайта -> внешний ключ в таблицу 1
Индекс (идентификатор строки, идентификатор сайта)

1
ответ дан 3 September 2019 в 00:41
поделиться

Если у вас уже есть естественный текстовый уникальный идентификатор для сайта (URL, возможно?), То единственное, что вам нужно, это ОДНА таблица с два поля:

CREATE TABLE (
    unique_identifier TEXT NOT NULL,
    site_identifier TEXT NOT NULL,
    PRIMARY KEY (unique_identifier, site_identifier)
);

Затем вы также можете добавить УНИКАЛЬНЫЙ ИНДЕКС в (site_identifier, unique_identifier), чтобы облегчить поиск по сайту.

Таким образом, вы можете использовать немного лишнего места для основной таблицы, но его очень просто запрашивать, обновлять и поддерживать.

1
ответ дан 3 September 2019 в 00:41
поделиться

На вашем месте я бы определенно избегал десятиколоночного булевого ужаса, поскольку позже всегда будет больше сайтов. Я согласен с Romain Hippeau, с дополнительным предложением, что вам может понадобиться индекс сайтов, чтобы ответить на вопросы типа "Кто посещал сайт x?".

0
ответ дан 3 September 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: