Предыдущий вопрос я немного решил, не смогя его до конца внести в учебники.
Вот был новый вопрос.
Я хочу такой тип данных в ПАШЭСУБД как SET.
Ты говоришь:
1.
2.
3.
insert(K23, "sobaka");
insert(K23, "sos");
insert(K23, "sos");
И у тебя есть ключи ["sobaka", "sos"] внутри K23, а последний запрос не выполнился, потому что "sos" там уже был.
Полезная структура хранить лайки, не давай лайкнуть что-то дважды, скажем.
Ну вот. И был такой вопрос из зала: почему не сделать просто хранение двух ключей: "K23sobaka" и "K23sos", решив задачу.
Ответ в том, что я хочу быстро выяснять сколько ключей лежит в K23 без пробегания по диапазонам, а имея своё разбиение на блоки, где про каждый блок может быть написано сколько там ключей лежит и просто суммируя их и всё такое.
И во-вторых я не хочу, чтобы какой-то рандомный ключ "K23s" привёл к тому, что у меня теперь в K23 как-бы уже 3 элемента.
Я хочу прямо явно, чтобы "K23s" был ключом от какого-то key=value, а "K23" был именем этого SET, т.е. key={SET} и я их отличал.
И ещё чтобы мог достаточно быстро, скажем, удалить K23, что не приводило бы к удалению огромных массивов последовательно идущих ключей, потому что нахрен надо, когда можно быстрее, скажем пометив тот K23={SET} как удалённый, что автоматически закрывает весь этот {SET} накуй.
Такие дела.
Конечно нормальный человек бы сказал: заведите K23.sos и K23.sobaka и всё. Разделяйте точкой. Введите правила генерации ключей. И не стройте вашу систему, что она может сгенерить любой другой ключ "K23.ЧТО_ТО" случайно, мол вы же не дебилы какие-то.
Ну как-бы да.
Но нормальными быть хуёво, хочется же быть рульнее. Например спросить размер всего K23 без пробега фуллсканом.
Скажем у меня лежат такие ключи:
1.
2.
3.
4.
5.
6.
7.
K23.2341234
K23.asdfasdf
K23.biquhwyhedwqieojrd
K23.sos
K23.sobaka
K23.tyuiytiu
K23.zzzpzoi
И их миллион. И лежат они в 5 тыщах блоков. В каждом блоке разное их количество. Чтобы узнать размер всего поддиапазона K23, мне надо пойти и все эти блоки зафуллсканить и посчитать. А так я могу заглянуть в каждый блок, посмотреть на местный подкусочек K23, где явно написан размер и просуммировать такие. Это слегка быстрее. Или не слегка. Но скорее слегка.
Вообще конечно у нормальных СУБД есть механизмы хранения ключей с общим префиксом, который примерно работает так же как моё изобретение, поэтому подумаваю его намотать на жопу и перестать выёбываться в этом месте.