Большие байты Endian и строки в качестве ключей в строковых базах данных - PullRequest
2 голосов
/ 11 января 2012

Я не видел здравого смысла о преобразовании целого числа в сетевой порядок и записи результирующих байтов в индексируемую сущность в строковой базе данных по сравнению с записью строкового представления числа где-либо в документации такого рода. базы данных.

Несомненно, что накладные расходы по размеру записи 64-битного int в виде строки в базу данных должны перевесить тривиальную сложность необходимости выполнения вызова ntohl перед записью байтов обратно в целочисленный тип.

Поэтому мне здесь чего-то не хватает, каковы недостатки использования байтов с обратным порядком байтов и строк в качестве индексируемых объектов в строковых базах данных?

(теги C ++ / C, когда я говорю о записи байтов в ячейку памяти программного типа, BDB, поскольку это база данных, которую я использую, также могут быть kyotodb).

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Преимущество big-endian в этом случае состоит в том, что строки будут правильно сортироваться в порядке возрастания.

Если архитектура базы данных не может изначально хранить 64-битные целые числа, но вам все равно нужно их хранить, строковыеэто способ сделать это.

Конечно, если позже вы обновите базу данных до базы, которая может хранить 64-битные целые числа, вы либо «застрянете» с реализацией, либо должны будете пройти через нее.процесс миграции.

2 голосов
/ 11 января 2012

Если база данных проверяет, что отправленные вами строковые данные действительны в ожидаемой кодировке, вы не можете просто предоставить ей любые нужные данные.Вы сможете отправлять только такие целые числа, которые выглядят как действительная кодировка.Я не знаю, выполняет ли BDB или kyotodb такую ​​проверку.

Также мне кажется хаком попытка обмануть один тип данных, чтобы он содержал что-то другое, а затем полагаться на клиентов, чтобы все знали хитрость.Конечно, это применимо, используете ли вы строку для хранения десятичного представления целого числа ascii или если вы используете строку в качестве необработанного буфера памяти для хранения целого числа.Мне кажется, что было бы лучше использовать базу данных, которая фактически содержит типы, которые вы хотите хранить, а не только строки.

...