Нужна помощь по версионированию / переносу данных - PullRequest
1 голос
/ 01 апреля 2011

Я работаю над проектом, в котором я буду использовать Membase (представьте себе Memcached + постоянство) в качестве нашего уровня постоянства с многоузловым кластером. Мы используем клиент Enyim для связи с кешем и используем двоичную сериализацию для сериализации / десериализации объектов в кеш и из него.

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

Используя Membase и имея дело с кэшированными двоичными объектами, мы МОЖЕМ захватить все кэшированные объекты и загрузить оба двоичных файла:

  1. версия кода, которая использовалась для сериализации кэшированных объектов
  2. новая версия кода, которая определяет различные свойства

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

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

Спасибо

1 Ответ

0 голосов
/ 01 апреля 2011

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

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

...