172 похожих чатов

Привет. Есть ли в Postgres тип данных Array/List такой, что

позволял бы хранить пару млрд чисел, вставлять в середину за число операций свойственное B+-tree логарифма (т.е. этот адский Array/list бы мог лежать не в одном Tuple, а в каком угодно числе Leaf-блоков B+-tree), возвращать элемент по индексу, удалять из начала, середины, конца, по индексу, пушить в конец?

26 ответов

15 просмотров

https://www.postgresql.org/message-id/4799.1214857781%40sss.pgh.pa.us

Нет. Но, вообще, основой моделирования в реляционных СУБД являются отношения (таблицы) — почему бы не использовать их? ;)

pavel- Автор вопроса
Yaroslav Schekin
Нет. Но, вообще, основой моделирования в реляционн...

Да просто было теоретически интересно. После того, как видел в одной nosql-хранилке возможность положить не только key=value а ещё и key=[list] с описанными свойствами листа.

Есть. Называется "таблица с первичным ключом".

pavel- Автор вопроса
Ilya Anfimov
Есть. Называется "таблица с первичным ключом".

Хочу миллиарды списков длиной 0...многомлн элементов. Это надо будет много много таблиц фигачить.

pavel
Хочу миллиарды списков длиной 0...многомлн элемент...

Одну. Правда, миллиард списков средней длиной сто тысяч хотя бы элементов -- будет занимать большэ петабайта. Боюсь, ... У вас в любом случае с этим будут некоторые проблемы.

pavel
Хочу миллиарды списков длиной 0...многомлн элемент...

И да, покупка лицэнзий оракла среди этих проблем будет самой небольшой.

pavel- Автор вопроса
Ilya Anfimov
Одну. Правда, миллиард списков средней длиной сто ...

Это не делается табличкой вообще. Например вставка в середину списка длиной лям элементов. Я хочу при этом доставать элементы по индексу. Ну или я тупой чтобы придумать такой create table. Еще раз задача: списки имеют имена или 64-битные произвольные айдишники. По id списка и index я достаю элемент. Я могу вставлять в середину списка. После такой вставки, все индексы элементов после середины ползут вверх на +1.

pavel
Это не делается табличкой вообще. Например вставка...

Если у вас там реально петабайты данных -- наймите программиста толкового, право слово.

pavel
Это не делается табличкой вообще. Например вставка...

Там есть нюансы, но в общем -- умеренной сложности структура.

pavel- Автор вопроса
pavel
Так как это делается табличкой?

Фактически -- делаете аналог toast руками, с отдельными пересчётами ключевых граничных позицый.

pavel- Автор вопроса
pavel
А для тупых дайте тынц на "toast"?

https://www.postgresql.org/docs/14/storage-toast.html

pavel- Автор вопроса
pavel
А для тупых дайте тынц на "toast"?

1) нанимается программист с db уклоном 2)выбирается релевантная субд, не уверен что сточные бд здесь оптимальны, например.... ну или уменьшаются аппетиты.... постгря 9-ая с объёмом в районе 2Тб уже требовала тонкой настройки структуры бд и продумывания всех запросов....

pavel- Автор вопроса
Ale><ander
1) нанимается программист с db уклоном 2)выбираетс...

Проблемы "решить задачу" нет, интерес академический.

pavel
Проблемы "решить задачу" нет, интерес академически...

А раз "академический" — какая структура данных даст вот это, в принципе: > списки имеют имена или 64-битные произвольные айдишники. По id списка и index я достаю элемент. Я могу вставлять в середину списка. Это O(log(N)) на вставку/поиск/удаление в худшем случае, так? Причём с требованием: > После такой вставки, все индексы элементов после середины ползут вверх на +1. Я правильно понял?

pavel- Автор вопроса
Yaroslav Schekin
А раз "академический" — какая структура данных дас...

Верно. ЗНаю реализацию такого на B+-tree например.

pavel
Верно. ЗНаю реализацию такого на B+-tree например.

Хмм... если последнее работает не за O(n), и ключи именно такие — то в чём трюк?

Yaroslav Schekin
Хмм... если последнее работает не за O(n), и ключи...

В обновлении всех страниц по пути к корню, включая корневую. Формально -- операцыя такой жэ сложности, как и прямой поиск.

Ilya Anfimov
В обновлении всех страниц по пути к корню, включая...

Не вижу, как это может работать. Индексы каким образом меняются? Вот исходное требование: "Я могу вставлять в середину списка. После такой вставки, все индексы элементов после середины ползут вверх на +1."

Yaroslav Schekin
Не вижу, как это может работать. Индексы каким обр...

В данных хранятся не индэксы как таковые, а размеры кусков. Потому для поиска -- идёт поиск BTree, в процэссе суммируются размеры. При обновлении -- меняются все страницы от изменившэйся до корневой.

Ilya Anfimov
В данных хранятся не индэксы как таковые, а размер...

Для [абстракции] массива это сработает, да. По "удалять из начала, середины, конца" я подумал, что индексы тоже могут удаляться (быть пропущены).

Yaroslav Schekin
Для [абстракции] массива это сработает, да. По "уд...

Ну, при жэлании можно и элемент "пропуск индэкса" добавить -- или дажэ просто поставить нужный размер.

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

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта