-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


Выбор типа дерева (структура данных) для хранения данных в БД

Среда, 24 Июня 2020 г. 22:33 + в цитатник
Pavia: AVA12
1)
Цитата
У B(+)-деревьев количество дочерних узлов может варьироваться. У карты файловых блоков количество элементов в каждом узле (кроме последнего "листа") фиксировано.
.
В википедии сказано что как правило фиксированное:
Цитата
In B-trees, internal (non-leaf) nodes can have a variable number of child nodes within some pre-defined range.

Плюс у DOUGLAS COMER так же чётко сказано что ключей в узле 2d.
https://dl.acm.org/doi/pdf/10.1145/356770.356776

Цитата
i) Each path from tire-root to any leaf has the same length h, also called the
height of T, i.e., h = number of nodes in path.

https://www.inf.fu-berlin.de/lehre/SS10/DBS...yerBTree-72.pdf

3.
Цитата
Узлы B(+)-дерева содержат как ссылки на дочерние узлы/листья, так и значения ключей. Карта файловых блоков содержит только ссылки, никаких ключей в ней нет.

Ещё скажите что файлов не существует. Ключи там есть К примеру такие ключи как i_size и i_mtime используются для синхронизации файлов.


Цитата
struct ext2_inode {
__u16 i_mode; /* Тип файла и права доступа (см.ниже) */
__u16 i_uid; /* UserID */
__u32 i_size; /* Размер в байтах */
__u32 i_atime; /* POSIX время последнего обращения к файлу */
__u32 i_ctime; /* POSIX время создания */
__u32 i_mtime; /* POSIX время последней модификации */
__u32 i_dtime; /* POSIX время удаления */
__u16 i_gid; /* GroupID */
__u16 i_links_count; /* Кол-во ссылок на дескриптор */
__u32 i_blocks; /* Кол-во секторов (не блоки!) */
__u32 i_flags; /* Флаг (см.ниже) */
union {
struct {
__u32 l_i_reserved1; /* Зарезервировано */
} linux1;
struct {
__u32 h_i_translator; /* ??? */
} hurd1;
struct {
__u32 m_i_reserved1; /* Зарезервировано */
} masix1;
} osd1;
__u32 i_block[EXT2_N_BLOCKS];/* Указатели на блок */
__u32 i_generation; /* Версия файла (для NFS) */
__u32 i_file_acl; /* Доп. аттрибуты файла */
__u32 i_dir_acl; /* Доп. аттрибуты директории */
__u32 i_faddr; /* Адрес фрагмента */
union {
struct {
__u8 l_i_frag; /* Номер фрагмента */
__u8 l_i_fsize; /* Размер фрагмента */
__u16 i_pad1; /* Зарезервировано */
__u16 l_i_uid_high; /* 16 старших битов UserID */
__u16 l_i_gid_high; /* 16 старших битов GroupID */
__u32 l_i_reserved2; /* Зарезервировано */
} linux2; /* LINUX */
struct {
__u8 h_i_frag; /* Номер фрагмента */
__u8 h_i_fsize; /* Размер фрагмента */
__u16 h_i_mode_high; /* 16 старших битов T&P */
__u16 h_i_uid_high; /* 16 старших битов UserID */
__u16 h_i_gid_high; /* 16 старших битов GroupID */
__u32 h_i_author; /* UserID или автор */
} hurd2; /* GNU HURD */
struct {
__u8 m_i_frag; /* Номер фрагмента */
__u8 m_i_fsize; /* Размер фрагмента */
__u16 m_pad1; /* Зарезервировано */
__u32 m_i_reserved2[2]; /* Зарезервировано */
} masix2; /* MASIX */
} osd2; /* Специфичные значения */
};

4.
Цитата
B(+)-дерево - это дерево поиска. Карта файловых блоков - это, в общем-то, и не дерево, это сегментированный массив.

В ext не используется битовая карта(сегментированный массив блоков)

2)
Цитата
2. B(+)-деревья позволяют вставку и удаления узла/листа, при этом затрагивается максимум log(n) узлов. Чтобы вставить или удалить узел в карту файловых блоков, нужно перетряхнуть все последующие узлы (в худшем случае - вообще все).

Б+-деревья используются для хранения данных на жёстких дисках. Если Если использовать сегментированный массив и поверх положить Б+ дерево, то да.
Это будет быстрее, поэтому NFTS и выигрывает у EXT в скорости. Но тут палка о двух концах либо вы сразу занимаетесь балансировкой дерева либо потом делаете дефргаментацию массива.

https://forum.sources.ru/index.php?showtopic=419028&view=findpost&p=3833105

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку