Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.220.140.5] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
В общем, смысл в том, что мне нужно сделать свою базу данных, не используюя стандартные движки
База данных должна включать в себя неограниченное (теоретически... на самом деле 2^32 вполне хватит ) число записей, каждая из которых может иметь несколько подзаписей (а те, в свою очередь, ещё несколько подзаписей и т.д), т.е. иметь вложенную структуру. Поддержка перекрёстных ссылок (т.е. несколько ссылок на одну запись) приветствуется, хотя необязательна. Запись - это одно или несколько полей (чаще всего как минимум два: заголовок и данные) переменной неограниченной длины, часть из которых может быть зашифрована (ну, это уже детали). Требования: быстрый (а ещё лучше - мгновенный) поиск (желательно по любому полю), чтение, изменение, добавление и удаление записи вне зависимости от размера самой базы данных с минимальным "мусором" (имеются в виду различные вспомогательные данные, индексирование и т.д). Быстрая сортировка по какому-либо полю из БД тоже приветствуется, хотя для этих целей её можно и пересоздать Так вот, я бы хотел узнать, как устроены современные базы данных (внутри) или услышать какие-нибудь интересные идеи по этому поводу. Организовать быстрый поиск и чтение - это задача не сложная, а вот когда добавляется редактирование, то тут возникают проблемы. Представьте себе: база данных на несколько мегабайт, при этом нужно отредактировать самую первую запись и без тормозов. - Заранее спасибо! |
Сообщ.
#2
,
|
|
|
Цитата Jin X, 8.08.04, 16:34 а вот когда добавляется редактирование, то тут возникают проблемы. Без проблем ведь структура известна (и постоянна). Тоесть есть N полей с размером К байт что бы перейти к записи О нада передвинуться на (N-O)*K байт, или от начала О*К. Цитата Jin X, 8.08.04, 16:34 Быстрая сортировка по какому-либо полю из БД тоже приветствуется, хотя для этих целей её можно и пересоздать Без сортировки современные БД и не работают. Jin X- задада не из легких. Inter Base - открытая архитектура и инфы много. DBF- тебе наверное не подойдет. |
Сообщ.
#3
,
|
|
|
Я бы посоветовал начать с Дейта. Там отлично описаны все принципы...
|
Сообщ.
#4
,
|
|
|
В базах данных все основано на хешировании. Индексные файлы - как раз и есть список, в котором по ключу находится запись.
|
Сообщ.
#5
,
|
|
|
Цитата tserega,9.08.04, 04:57 В базах данных все основано на хешировании. Индексные файлы - как раз и есть список, в котором по ключу находится запись. Индексирование есть всегда, а физическая реализация может быть очень разным. Взять хотя наиболее популярные на сегодня индексы - В+ деревья и кластерные хеш-индексы... Последние кстати есть гарантия (с некоторой долей приближения в зависимости от СУБД) упорядоченности физического размещения данных. В+ - деревья не отличаются ничем подобным. Так что все же стоит почитать основы. |
Сообщ.
#6
,
|
|
|
Товарища Кнута почитать надо бы
и с деревьями ознакомиться В общем случае разработать темплейный класс.. |
Сообщ.
#7
,
|
|
|
Цитата Проблема в том, что K неизвестно и может меняться. Даже если K - это указатель, то как хранить сами строки, чтобы их было легко редактировать? Т.е, упрощённо говоря, представь себе, что нужно сделать что-то типа текстового редактора, где каждая строка может быть любой длины, но к каждой должен быть мгновенный доступ, зная первые буквы. Причём, этот редактор вовсе не обязан держать весь файл в памяти.Bas, 9.08.04, 11:40 Без проблем ведь структура известна (и постоянна). Тоесть есть N полей с размером К байт что бы перейти к записи О нада передвинуться на (N-O)*K байт, или от начала О*К. Вообще говоря, я не хочу использовать готовые БД потому, что прога не очень большая, а тащить в дистрибутив ещё мега 3-4 из-за движка типа BDE не хочется. Ведь даже Access стоит не у каждого. Если это действительно сложная задача, то видимо, придётся держать весь файл в памяти, но тогда есть опасность того, что данные потеряются, например, при зависании компа. А периодически записывать весь файл - это лишнее время. К тому же, только пустая БД, например, Access'а занимает больше 50kb |
Сообщ.
#8
,
|
|
|
Для таких вещей уже давно придуманы embedded databases. Неужели 3-4 мега стоят 2-3 месяцев работы по изобретанию велосипеда?
|
Сообщ.
#9
,
|
|
|
Мне не нужна громадная система, которую нужно строить 2-3 месяца. Вполне пойдёт что-нибудь попроще, что можно сделать за пару дней. К тому же, эти 3 мега придётся пихать во все проги, которые используют БД.
|
Сообщ.
#10
,
|
|
|
Сообщ.
#11
,
|
|
|
Ты намекаешь на XML?
|
Сообщ.
#12
,
|
|
|
Не подходит?
|
Сообщ.
#13
,
|
|
|
Да я пока как-то и не разбирался с ним.
Если работает быстро и туда можно запихнуть любые символы (т.е. и табы, и пробелы в начале/конце строк, и "управляющие" и т.д), то может и подойти Спасибо Добавлено в : В Delphi даже стандартные компоненты есть для XML |
Сообщ.
#14
,
|
|
|
Запихнуть можно любые. (см. например конструкцию CDATA а также Entities).
То что компоненты есть - это конечно круто (еще нехватало чтобы их не было), только как быть с требованием что файл на несколько мегов а тебе надо быстро искать и редактировать? Я вот например столкнулся что реализация XPath (язык запросов к хмл) Engine может быть весьма неэффективной.. |
Сообщ.
#15
,
|
|
|
Эх! Если XML работает так же быстро, как чтение и перезапись всего файла, тогда он мне нафиг не нужен.
|