LINUX.ORG.RU

Нужен совет от гуру

 , ,


0

1

Делаю пет-проект, немного запутался с хранением данных. У меня есть 4 ключа, которые указывают на одно и то же значение. Например 4 разных типа хэша указывают на одну строку. Как хранить подобное, чтобы не писать 4 пары на диск и иметь возможность находить строку по одному из хэшей? SQL не подходит по причине того, что записей там будет огромное количество, писать нужно постоянно, читать редко. Но без индексов чтение будет медленным, а с индексами займёт очень много места. Из-за этого я смотрю в сторону bbolt или leveldb, тем более сложных запросов не будет, sql не нужен.

★★★★

(Postgres)SQL – это не только SQL, но и вполне продуктивное и проверенное KV хранилище. Зря сразу исключаешь.

Всего то 2 таблицы

  • create table data (id serial, data bytea);
  • create table keys (id serial, key bytea, data_id references data.id);

Элементарный upinsert, элементарный select и элементарный delete. Что тебе ещё от KV надо?

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от beastie

data.data это строка, keys.key это ключ? Без индексов нереально же будет искать по милиарду записей?

dnb ★★★★
() автор топика
Ответ на: комментарий от beastie
# create table keys (id serial, key bytea, data_id references data.id);
ОШИБКА:  ошибка синтаксиса (примерное положение: "references")
СТРОКА 1: create table keys (id serial, key bytea, data_id references ...
                                                           ^
dnb ★★★★
() автор топика
Ответ на: комментарий от dnb

Писал по памяти на затравку же. Поправил:

create table data (id serial unique, date bytea);
create table keys (key text primary key, data int references data(id));
beastie ★★★★★
()

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

kardapoltsev ★★★★★
()
Ответ на: комментарий от beastie

Спасибо, а как туда красиво инсертить?

dnb ★★★★
() автор топика
Ответ на: комментарий от anonymous-angler

… on conflict (key) do update set data = EXCLUDED.data;

как-то так.

beastie ★★★★★
()
Ответ на: комментарий от evgeny_aa

Хранить в хэш-таблицах?

dnb ★★★★
() автор топика
Ответ на: комментарий от evgeny_aa

У него же там дофига записей, редиса может и хватит, а оперативки может и нет.

p.s. плюсую постгрес

pi11 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.