Quelle est la meilleure méthode de sérialisation d'objets dans memcached?

Mon application en Python utilise actuellement le python-memcached API pour définir et obtenir des objets dans memcached. Cette API utilise Python natif module pickle pour sérialiser et désérialiser des objets Python.

Cette API, il est simple et rapide pour stocker imbriquée Python, les listes, les dictionnaires et les tuples dans memcached, et la lecture de ces objets dans l'application est complètement transparent -- il fonctionne, tout simplement.

Mais je ne veux pas être limité à l'aide de Python exclusivement, et si tous les objets memcache sont en série avec les cornichons, les clients écrits dans d'autres langues ne fonctionnent pas.

Voici la croix-plate-forme options de sérialisation j'ai réfléchi:

  1. XML - le principal avantage est qu'il est lisible par l'homme, mais ce n'est pas important dans cette application. XML prend également beaucoup d'espace, et c'est cher à analyser.

  2. JSON semble être une bonne croix-plate-forme standard, mais je ne suis pas sûr qu'il conserve le caractère des types d'objet lors de la lecture de retour de memcached. Par exemple, selon ce post tuples sont transformés dans des listes lors de l'utilisation de simplejson; aussi, il semble que l'ajout d'éléments à la structure JSON pourrait casser le code écrit à l'ancienne structure

  3. Google Protocol Buffers - Je suis vraiment intéressé par ce parce qu'il semble très rapide et compact -- au moins 10 fois plus petit et plus rapide que XML; il n'est pas lisible par l'homme, mais ce n'est pas important pour cette application; et il semble avoir été conçu pour soutenir la croissance de la structure, sans rupture de l'ancien code

Compte tenu des priorités pour cette application, ce qui est l'objet idéal méthode de sérialisation pour memcached?

  1. Support multi-plateforme (Python, Java, C#, C++, Ruby, Perl)

  2. De la manipulation de structures de données imbriquées

  3. Rapide de sérialisation/dé-sérialisation

  4. Minimum de mémoire

  5. La possibilité de changer de structure, sans rupture de l'ancien code
  • Je pense que vous devez d'abord définir les types d'objet que vous souhaitez stocker. Vous avez déjà fait les tuples/listes de problème et de l'arbitraire des types de données que vous exécutez dans l'arbitraire des problèmes 😉
  • Je pense que le point est que les types d'objet sont arbitraires.
InformationsquelleAutor mb. | 2009-01-31