powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / vector на триллион объектов
25 сообщений из 332, страница 3 из 14
vector на триллион объектов
    #39972674
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можем даже заниматься системной оптимизацией полнотекстового. Надо просто поставить задачу.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972675
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЧто хранится в бинарном дереве?

То же что и обычно - ключ, полученный какими-то преобразованиями данных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972676
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Можем даже заниматься системной оптимизацией полнотекстового. Надо просто поставить задачу.

Мы много чем можем можем заняться))).
Просто ТС не может поставить задачу.
))
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972679
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravЧто хранится в бинарном дереве?

То же что и обычно - ключ, полученный какими-то преобразованиями данных.

Там хранится ключ и указатель на физическое местоположение строки (RowId) в datafile.
Это для листовых узлов индекса. Для не-листовых - там линки на соседние блоки индекса.

Его формат немного отличается от указателя. Например Oracle хранит группу целых
чисел (номер файла, номер блока в файле (это тот самый 8к блок файловой системы),
и номер строки внутри блока). И дополнительно objectId. Это кажется надо для поддержки
кластеризованных таблиц.

Например. Фрагмент блока индекса.

(Я пишу в формате JSON чтоб было понятно. На самом деле там - RAW.)
keyrow_id (in JSON)mayton{ file=1, block=25, row=3, objId=... }Petro{ file=1, block=25, row=4, objId=... }........

В таблице есть блок номер 25 где лежат 2 строки проиндексированные по ключам mayton, Petro.

Понятно что file=1 это уже не файл где лежит индекс а файл где лежит индексируемая таблица.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972680
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Замечательно. Осталось выяснить уникальность ключа и работает ли по нему поиск)
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972681
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Dimitry Sibiryakov

пропущено...

То же что и обычно - ключ, полученный какими-то преобразованиями данных.

Там хранится ключ и указатель на физическое местоположение строки (RowId) в datafile.
Это для листовых узлов индекса. Для не-листовых - там линки на соседние блоки индекса.

Я не это имел в виду. Уточню: в случае индекса по строковому полю, что представляет собой ключ?
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972684
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже работает. С точки зрения Oracle (например) - все индексы являются Unique по своей структуре данных.

Неуникальные там достигаются изменением алгоритма в плане оптимизатора. Как точно - я щас не помню
надо почитать. Дядка Том писал об этом.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972686
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
пропущено...

Там хранится ключ и указатель на физическое местоположение строки (RowId) в datafile.
Это для листовых узлов индекса. Для не-листовых - там линки на соседние блоки индекса.

Я не это имел в виду. Уточню: в случае индекса по строковому полю, что представляет собой ключ?

Абсолютную копию этой-же строки. Тоесть строка "mayton" будет физически скопирована с таблицы в индекс.

Но если тебя интересует экономия места - то можно строить Index-Organized-Tables (это гибрид таблицы и индекса).
Но там есть ограничения. Нельзя дополнительные поля проиндексировать. Только primary.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972687
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Да милисекунды это долго. Дольше чем просто память. Но обычно все DBMS прогревают в кешах
корневые вершины индексов и если с индексом долго работать то в учет времени можно
брать уже листовые узлы.

Как же происходит балансировка такого дерева, если в кешах только верхняя часть дерева?
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972690
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonАбсолютную копию этой-же строки.
В простейшем случае - да, но обычно применяют преобразования для получения CI AI.
И префиксную компрессию.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972693
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton

Да милисекунды это долго. Дольше чем просто память. Но обычно все DBMS прогревают в кешах
корневые вершины индексов и если с индексом долго работать то в учет времени можно
брать уже листовые узлы.

Как же происходит балансировка такого дерева, если в кешах только верхняя часть дерева?

В онлайне. Оно растет от листьев к корню. Грубо говоря - малый индекс - это 1 блок.

Когда инфа больше чем 8 килобайт - происходит split блока на 2 части вверх поднимается
новый ключ-медиана который делит условно все пространство ключей на 2 диапазона.
Те что больше ключа ложаться в правое поддерево. А те что меньше в левое.

Корневой узел хранит 1 ключ и два указателя влево и справо. А а дочерние узлы - листовые
хранят уже ключи и ROW_ID.

А вот примерно так будет выглядеть индекс с 3 уровнями. Это когда после сплитов наш корневой узел
опух до предела и произошел новый сплит с поднятием нового корня еще выше вверх.



Работает тоже самое алгоритм бинарного дерева просто заточенный под работу дисковыми блочками
чтоб не создавать лишней нагрузки.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972694
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работа кешей БД - это прозрачный механизм для движка. Ему по большему счету все равно откуда
читать. Просто исходим из предположения что наиболее горячие блоки сконцентрированы вверху
дерева.

Есть там еще такой интересный параметр как фактор кластеризации. Он .. грубо говоря показывает
насколько сильно мы будем промахиваться мимо кеша (таблицы) если будет скан индекса с первого ключа
по последний. Это актуально для запросов в RANGE-предикатом. Типа where date between d1 and d2.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972696
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Тоже работает. С точки зрения Oracle (например) - все индексы являются Unique по своей структуре данных.

Неуникальные там достигаются изменением алгоритма в плане оптимизатора. Как точно - я щас не помню
надо почитать. Дядка Том писал об этом.

Тут задают вопрос об уникальности с точки зрения бизнеса.
Чтобы full scan не было.
То есть перебора всех строк подряд.
Мы глубоко в физику процесса полезли.
Что будет индексом к "Война и мир"?
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972697
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Без блока where вся твоя физика процесса индексации не имеет смысла.
Так как ключи могут быть не использованы вообще оптимизатором.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972698
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть отдельный API который бегает мимо кешей. DIRECT. Типа прямой.
Он нужен для массовых операций типа count(*). И чтобы count своей селективностью
не засирал кеш - его кидают отдельной операцией которая не влияет на состояние кеша.

Тоже самое к массовым процессам типа ETL.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972699
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton
Тоже работает. С точки зрения Oracle (например) - все индексы являются Unique по своей структуре данных.

Неуникальные там достигаются изменением алгоритма в плане оптимизатора. Как точно - я щас не помню
надо почитать. Дядка Том писал об этом.

Тут задают вопрос об уникальности с точки зрения бизнеса.
Чтобы full scan не было.
То есть перебора всех строк подряд.
Мы глубоко в физику процесса полезли.
Что будет индексом к "Война и мир"?

Я ведь тоже не могу ответить на этот вопрос при такой обобщённой постановке.

Прямой ответ - смотрите в excecution plan и добивайтесь того чтобы FTS операция была
заменена на index-scan, index-range, e.t.c. Есть еще варианты - использовать partition iterator
но это все требует деталей которых у меня нет.

Оптимизаторы часто используют логику наподобие нейро-сети. Тоесть принимают решение
исходя из десятка настроечных параметров и не один DBA не может наперед сказать что
план будет хорош или плох. Оптимизация плана - это итеративный процесс. Смотришь.
Изменяешь. Смотришь. Изменяешь... итд.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972704
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Просто не люблю усложнять когда нет вообще постановки.
Пример:
- ТС не говоил что будут запросы. Поэтому индексом PK к колонке строк Война и мир будет автоинкремент.
Чтобы при родах вектора структуру книги не потерять.
Всё.
Автор больше не усложнял никакими доп требованиями.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972706
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

>Прямой ответ - смотрите в excecution plan
До плана далеко. Мы не построили Модель.
Не знаем типы данных в колонках и какой индекс строить руками при проектировании таблицы.
Индексов то полно всяких).
Я выше предложил МИНИМАЛЬНЫЙ. Автоинкремент PK
Пусть автор докажет что это не работает.
"ТС работает больше отвечающих" (с)
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972709
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу войны и мира.

Что ты хочешь найти? Страницу документа? Номер строки? Или Строка и номер слова в строке?
Хочешь ли ты строгий поиск по совпадению? Или ты хочешь поиск по основе слова?
Или ты хочешь стемминг и лематизацию и способность кода находить синонимы и похожие
слова и опечатки.

Это все дополнения которые на 100 и более % меняют постановку и заставляют нас прыгать
от обычного индекса - к индексу Би-грамм и к фильтру Блума. И к фасетизации всех данных.

Текстовый поиск это вообще офигенски сложная дисциплина. И я в ней плаваю.
Я знаю ее где-то на 10% и там много подводных камней.

Всё что я описывал выше это обычный классический поиск в БД который к тексту вообще-то
отношения не имеет.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972712
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Конечно.
Поэтому кеши, деревья, и еще раз кеши мимо темы топика.
Имхо.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972729
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо. Тогда я умолкаю. Подожду Алексея с его тера-массивом структур.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972732
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav
пропущено...

Как же происходит балансировка такого дерева, если в кешах только верхняя часть дерева?

В онлайне. Оно растет от листьев к корню. Грубо говоря - малый индекс - это 1 блок.

Это я понимаю, оффкос, примерно.

Простой вопрос. У нас террабайт строк, мы ещё создали индекс на террабайт. При этом 99% этого индекса лежит на диске. Добавление одной строки не приведёт ли к полной перестройке дерева? Т.е. к полному поднятию терребайтного индекса с диска и обратной записи на диск этого террабайта.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972733
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravДобавление одной строки не приведёт ли к полной перестройке дерева?

Нет, максимум три блока при сплите.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972735
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
пропущено...

В онлайне. Оно растет от листьев к корню. Грубо говоря - малый индекс - это 1 блок.

Это я понимаю, оффкос, примерно.

Простой вопрос. У нас террабайт строк, мы ещё создали индекс на террабайт. При этом 99% этого индекса лежит на диске. Добавление одной строки не приведёт ли к полной перестройке дерева? Т.е. к полному поднятию терребайтного индекса с диска и обратной записи на диск этого террабайта.

Нет конешно. Еслиб такой ужас был тогда и загрузка данных в таблицу лагала-бы.

В наихудшем случае может быть split. Но это вместо 4 IOPS, будет чуть больше.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39972755
ну вы писАть блин...
PetroNotC Sharp
Алексей Роза
есть какие-то ограничения в практическом применении векторов?
если вектор вырастет до триллиона структур и будет постоянно висеть в памяти, есть ли какие-то риски?

То есть памяти хватает и ты в курсе как это решать?
Тогда никаких рисков. Работай.

Памяти хватает. Не хватает опыта. Что будет через 5 лет нахождения информации в памяти? Каков шанс потерять рандомный байт?
mayton
Но для начала. Давай просто сделаем такой confirm, что алгоритмы поиска на диске
в принципе ничем особо не отличаются по complexity от алгоритмов по оперативке.
Формула - таже самая. С логарифмом в основе. Тоже самое B+Tree дерево - это
сжатое в блоки бинарное дерево поиска.

Да это основы. Ясно, что и там, и там стандартная хексовая таблица. Было бы странно, если бы память и HDD хранили инфу по-разному, ведь и то, и то - память.
mayton
Да милисекунды это долго. Дольше чем просто память. Но обычно все DBMS прогревают в кешах корневые вершины индексов и если с индексом долго работать то в учет времени можно
брать уже листовые узлы.

не надо DBMS.
mayton
сумеем придумать access path такой короткой длины чтобы оперативная память и диск работали в тандеме и находили
данные так быстро как только возможно

не надо.
mayton
Есть также альтернативные разработки (dbms Tarantool) которые улучшают даже B+Tree индекс.

аааААааааАааАААаААаАааа
mayton
Хорошо. Тогда я умолкаю. Подожду Алексея с его тера-массивом структур.

ну строго говоря, самое близкое к моей задаче - это индекс.
но это не задача... у меня нет вопросов про то, как индексировать
есть только вопрос заданный выше... и ещё один теперь можно обсудить - про полнотекстовый поиск, раз уж его затронули.
Я так понимаю, чтобы в "Войне и мир" найти слово "кровь" надо всю войну разложить в столбики по одинаковым словам?
Вообще у гугла есть описание, как устроен поиск... там 3.14здецки сложно.
...
Рейтинг: 0 / 0
25 сообщений из 332, страница 3 из 14
Форумы / C++ [игнор отключен] [закрыт для гостей] / vector на триллион объектов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]