Преимущества hstore перед таблицей ключ / значение с PostgreSQL? - PullRequest
0 голосов
/ 28 октября 2019

В одном из наших приложений нам нужно иметь несколько пар ключ / значение, которые мы будем периодически обновлять.

Сначала мы думали о таблице, которая будет выглядеть примерно так:

CREATE TABLE "KeyValue" (
    "Key"   TEXT UNIQUE,
    "Value" TEXT,
    PRIMARY KEY("Key")
);

, которая идеально соответствует нашим потребностям.

Но во время копания, если что-то уже встроено, я нашело модуле hstore , но я не могу по-настоящему осмыслить преимущества использования этого магазина вместо моего старомодного стола.

Кроме того, синтаксис мне кажется немного странным, когда я смотрю на примеры, я не могу найти простой пример, где объясняется, как создать пару (например, "StartDate": "2012/12/25"), прочитать его (например,"2012/12/25"), затем обновите его ("StartDate": "2012/12/26") и, возможно, удалите.

Есть ли кто-то, кто мог бы объяснить преимущества использования hstore по сравнению с традиционной таблицей, которую я только что составил выше?

1 Ответ

1 голос
/ 28 октября 2019

Я использовал hstore ранее через Hibernate / Java. Я сделал это, потому что общий размер карты на строку был небольшим , но таблица, подобная описанной вами, с парами ключ-значение для конкретной строки, имела бы действительно много строк. Возможно, я ошибаюсь, но я помню, что hstore, возможно, изначально был разработан для небольших карт, но об этом больше нет упоминаний на страницах документации. Кроме того, мои требования к столбцу hstore были связаны только со строкой, любая «отчетность», которая была сделана для всех значений столбца, была предназначена только для разработки.

Хотя, глядя на ваш пример таблицы, выглядело бывы ищете глобально уникальные ключи, где, как я думаю, hstore наиболее полезно, когда у вас есть один hstore на строку. Я не думаю, что вам следует решать «глобально уникальные ключи» с помощью hstore и некоторого индекса, пока это возможно.

Обратите внимание, что вы ссылались на неподдерживаемую версию postgresql, вот последняя hstore документация . В нем есть примеры создания экземпляров (SELECT 'a=>1,a=>2'::hstore; или hstore('c', '3')) и раздел примеров содержит остальные примеры, которые вы задали.

Прошло много времени с тех пор, как я последний раз разрабатывал или поддерживалчто-нибудь на postgresql, но, что я помню, поддержка json шла быстро и выглядела интересно. Если вы храните в столбце Value что-либо, кроме непрозрачных строк, возможно, стоит взглянуть на поддержку json, поскольку она может поддерживать типы данных json с некоторыми ограничениями .

...