Python—以高性能序列化数据的最佳方式?

Python—以高性能序列化数据的最佳方式?,python,serialization,marshalling,pickle,Python,Serialization,Marshalling,Pickle,我需要序列化需要高性能的数据。分离线程将每秒访问它,并且必须将数据加载到内存中。关于用户会话(id、sessiond、登录日期),将有大约1000-10000个类似字典的条目。有些数据会经常更新,因为登录时间还有一些时间 这些数据将在python服务器和Django应用程序之间共享。我想使用pickle或其更快的版本cPickle。我也发现了 最好的方法是什么?cPickle足够有效吗?或者元帅 编辑: 非常重要的是访问时间。这将是一个实时websocket服务器,所以我需要非常低的延迟。每秒访

我需要序列化需要高性能的数据。分离线程将每秒访问它,并且必须将数据加载到内存中。关于用户会话(id、sessiond、登录日期),将有大约1000-10000个类似字典的条目。有些数据会经常更新,因为登录时间还有一些时间

这些数据将在python服务器和Django应用程序之间共享。我想使用pickle或其更快的版本cPickle。我也发现了

最好的方法是什么?cPickle足够有效吗?或者元帅

编辑
非常重要的是访问时间。这将是一个实时websocket服务器,所以我需要非常低的延迟。每秒访问一次cPickle数据或连接到像Redis这样的数据库会更快吗?

更好的方法可能是使用一些内存缓存(memcached,如果您的需要很简单的话),或者使用一些功能集稍多的东西,如Redis。

使用内存中的真实数据库。不要使用pickle、cPickle或marshal之类的工具。

redis
仍然需要序列化任何复杂的
python对象,因此
redis
不能解决这个问题,除非您将所有数据表示为简单的键和简单的值
redis
不是反序列化解决方案,它只是字符串的数据存储。在任何情况下,
redis
都是较慢的选项之一:

cPickle与redis相比速度会非常慢,redis是为速度而设计的。不幸的是,事实证明redis实际上非常慢。这是因为redis被设计成一个远程数据存储,每个命令都会产生昂贵的网络往返或IPC。复杂的对象无论如何都会被redis处理