Хранение сериализованного объекта ruby ​​в базе данных - PullRequest
1 голос
/ 25 февраля 2010

Я хотел бы хранить очень большие наборы сериализованных объектов Ruby в db (mysql).

1) Какие минусы и плюсы?
2) Есть ли альтернативный способ?
3) Какие технические трудности, если объекты действительно большие?
4) Буду ли я сталкиваться с проблемами памяти при сериализации и десериализации, если объекты действительно большие?

Ответы [ 3 ]

4 голосов
/ 25 февраля 2010

Плюсы

  • Позволяет хранить произвольные сложные объекты
  • Упрощенная схема БД (не нужно представлять эти сложные объекты)

Против

  • усложняет ваши модели и уровень данных
  • Потенциально необходимо обрабатывать несколько версий сериализованных объектов (изменения в определении объекта с течением времени)
  • Невозможность напрямую запросить сериализованные столбцы

Альтернатива

Как указывалось в предыдущем ответе, объектная база данных или ориентированная на документы база данных могут соответствовать вашим требованиям.

Сложности

Если ваши объекты достаточно велики, вы можете столкнуться с трудностями при перемещении данных между вашей СУБД и вашей программой. Вы можете минимизировать это, отделяя хранилище данных объекта и метаданных, связанных с объектом.

Проблемы с памятью

Недостаточно памяти - это вполне возможно при наличии достаточно больших объектов. Это также зависит от типа сериализации, которую вы используете. Чтобы узнать, сколько памяти вы будете использовать, вам нужно профилировать свое приложение. Я бы предложил ruby-prof, bleak_house или memprof.


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

Если вы хотите продолжить, вам лучше всего использовать объектно-ориентированные базы данных, такие как ObjectStore, или документно-ориентированные базы данных, такие как CouchDB. Они лучше разработаны и предназначены для сериализации объектов.

2 голосов
/ 25 февраля 2010

В качестве альтернативы вы можете использовать любую из множества баз данных NoSQL. Если вы можете сериализовать свой объект в JSON, тогда он должен быть легко сохранен в CouchDB.

1 голос
/ 25 февраля 2010

Вы должны иметь в виду, что сериализованные объекты с точки зрения дискового пространства намного больше, чем если бы вы сохранили их по-своему и загрузили их по-своему. Ввод / вывод с жесткого диска очень медленный, и если вы смотрите на сложные объекты, которые требуют большой вычислительной мощности, на самом деле может быть быстрее загружать файл (ы) и обрабатывать его при каждом запуске; или, возможно, сохранить данные таким образом, чтобы их было легко загрузить.

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