Ключи объектов IndexedDB: имеет ли значение размер?

Я собираюсь хранить много объектов в хранилище объектов indexeddb. Все объекты имеют одинаковую структуру, что-то вроде {somekey: xxx, somevalue: yyy}.

Влияет ли длина ключей объекта на размер хранимых данных? Например, если я изменю структуру на {s: xxxx, v: yyyy}, должен ли я ожидать лучшего места в хранилище объектов с текущими браузерами?

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


person watsoup    schedule 11.09.2012    source источник


Ответы (1)


Да, повлияет. Но, по крайней мере, для ключей разумного размера один символ против 10 или 20 символов не будет иметь никакого значения в производительности, если только вы не работаете в очень большом масштабе (миллионы записей). Большинство реализаций (включая хром, за который я могу говорить) хранят полный объект, включая имена ключей, но индексы сохраняют «путь к ключу» только один раз.

Это означает, что {"foo": "bar"}, вероятно, занимает порядка ~ 12 байтов для хранения (примерно 4 байта для каждой строки плюс некоторые накладные расходы на информацию о типе, но последующий индекс для "foo" будет хранить только "баз".

{"foobarbaz": "helloworld"}, вероятно, занимает ~ 23 байта для хранения. На самом деле я ожидаю, что в большинстве случаев ваши собственные данные должны затмить накладные расходы длины ключа, и попытка укоротить ваши ключи, чтобы сэкономить несколько байтов, является преждевременной оптимизацией.

person alecf    schedule 11.09.2012
comment
Спасибо за ваш ответ, однако мой вопрос был больше о занимаемой площади, чем о производительности. Например, используя ваш пример, если я сохраняю {foobarbaz: helloworld} двадцать раз, текущая реализация использует ~ 23 байта x 20, или ключ хранится в словаре и упоминается как таковой в структуре (подразумевая, что длинные имена ключей использование во всех объектах не оказывает существенного влияния на квоту хранилища) - person watsoup; 13.09.2012
comment
Извините, я думаю, что мог что-то неправильно назвать, когда я говорю ключ, я имею в виду имена свойств в хранимом структурированном объекте... - person watsoup; 13.09.2012
comment
да, я говорил об объеме хранилища, и обычно да, объект сохраняется 20 раз, по крайней мере, в тех реализациях, о которых я знаю. - person alecf; 18.09.2012