В настоящее время приложение My Python использует API python-memcached для установки и получения объектов в memcached. Этот API использует Python native pickle module для сериализации и де-сериализации объектов Python.
Этот API упрощает и позволяет хранить вложенные списки Python, словари и кортежи в memcached, а чтение этих объектов обратно в приложение полностью прозрачно - оно просто работает.
Но я не хочу быть ограничивается исключительно использованием Python, и если все объекты memcached сериализуются с помощью pickle, клиенты, написанные на других языках, не будут работать.
Ниже перечислены варианты межплатформенной сериализации:
- XML - главное преимущество заключается в том, что он читается человеком, но это не важно в этом приложении. XML также занимает много места, и он дорого разбирается.
- JSON - кажется хорошим межплатформенным стандартом, но я не уверен, что он сохраняет характер типов объектов при чтении с memcached. Например, в соответствии с этот пост кортежи преобразуются в списки при использовании simplejson; также, похоже, что добавление элементов в структуру JSON может привести к повреждению кода, написанного в старой структуре
- Буферы протокола Google - меня это очень интересует, потому что кажется очень быстрым и компактным - по меньшей мере в 10 раз меньше и быстрее чем XML; он не читается человеком, но это не важно для этого приложения; и, похоже, он предназначен для поддержки роста структуры без нарушения старого кода
Учитывая приоритеты для этого приложения, какой метод сериализации идеального объекта для memcached?
- Поддержка кросс-платформенных (Python, Java, С#, С++, Ruby, Perl)
- Обработка вложенных структур данных
- Быстрая сериализация/де-сериализация
- Минимальный объем памяти
- Гибкость для изменения структуры без разбивки старого кода