BerkeleyDB - последствия неправильного порядка сортировки?
Согласно этому FAQ, на коэффициент заполнения страницы может отрицательно повлиять отсутствие указания функции сортировки для двоичных данных в системах с прямым порядком байтов. Я понимаю, что это также приведет к тому, что курсоры не будут возвращать данные в "правильном" отсортированном порядке.
Помимо чрезмерного использования страницы, это может вызвать другие проблемы с производительностью? Например, не влияет ли плохой коэффициент заполнения страницы на скорость поиска по ключевым словам?
Кроме того, если у меня уже есть данные, хранящиеся в BTREE без функции сортировки, что-нибудь сломается, если я впоследствии начну использовать функцию сортировки для добавления новых записей? то есть будет ли несоответствие между первоначально использованным порядком сортировки и поиском новой функции сортировки с помощью ключа?
1 ответ
Да, неправильный порядок байтов может снизить коэффициент заполнения, и в результате ваша база данных станет больше и медленнее будет работать. Сегодня я вставлял около 30 миллионов записей с последовательным целочисленным ключом и заметил довольно плохой коэффициент заполнения btree (60%). Затем изменил порядковый номер клавиши (использовал функцию htonl()) и коэффициент заполнения подскочил до 99%. В то же время размер базы данных был уменьшен с 1,3 ГБ до 700 МБ. Порядковый номер важен, когда ваш ключ является последовательным или показывает некоторую локальность (общий префикс для связанных данных). Для некоторых клавиш изменение порядкового номера может ухудшить производительность (я испытал это с номерами мобильных телефонов). Кстати, вам не нужно предоставлять функцию сортировки - вы можете просто преобразовать ключи в правильные порядковые номера при вставке и поиске по ключу.