Какой формат сериализации для пар ключ / значение лучше всего индексируется в РСУБД? - PullRequest
0 голосов
/ 18 июля 2009

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

Я решил просто добавить в таблицу поле blob и сохранить пары ключ / значение в каком-либо сериализованном формате. По вашему опыту, какой формат наиболее рекомендуется?

В контексте моего приложения это место для хранения является вторичным. Есть одна конкретная операция, которую я хочу выполнить быстро: поиск правильного экземпляра для заданного набора пар ключ / значение (так что это своего рода составной ключ переменного поля). Я предполагаю, что это означает, есть ли формат, который особенно хорошо подходит для типичной индексации базы данных?

Кроме того, мне может быть интересно найти набор экземпляров, которые используют один и тот же набор ключей (adhoc «класс», если хотите).

Я пишу это на Java и храню в различных типах баз данных SQL. У меня на радаре есть JSON, GPB и нативная сериализация Java, предпочтение отдается языковым форматам. Я могу думать о двух основных стратегиях:

  • сохранить набор значений в таблице и добавить внешний ключ в отдельную таблицу, содержащую набор ключей
  • сохранить пары ключ / значение в таблице

Ответы [ 2 ]

1 голос
/ 19 июля 2009

Если ваша цель состоит в том, чтобы использовать преимущества индексов базы данных, хранение неструктурированных данных в BLOB не будет эффективным. BLOB по сути непрозрачны с точки зрения RDBMS.

Из вашего описания я понял, что неструктурированная часть данных принимает форму произвольного набора пар ключ-значение, связанных с объектом, верно? Что ж, если типы всех ключей одинаковы (например, они все строки), я бы рекомендовал просто создать дочернюю таблицу с (как минимум) тремя столбцами: ключ, значение и внешний ключ для родителя. строка объекта в его таблице. Поскольку ключи будут храниться в базе данных как обычный столбец, они могут быть эффективно проиндексированы. Индекс должен также включать внешний ключ к родительской таблице.

Совершенно другой подход заключается в том, чтобы взглянуть на «безсхемную» базу данных, такую ​​как CouchDB , которая специально разработана для работы с неструктурированными данными. У меня нет опыта работы с такими системами, и я не знаю, насколько хорошо остальная часть вашего приложения подойдет для этой альтернативной стратегии хранения, но, возможно, стоит взглянуть на нее.

1 голос
/ 18 июля 2009

Не совсем отвечает на ваш вопрос, но рассматривали ли вы вопрос о Java Edition BerkeleyDB ? Дублированные ключи и сериализованные значения могут быть сохранены с этим (быстрым) движком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...