小编mb.*_*mb.的帖子

memcached中对象的最佳序列化方法是什么?

我的Python应用程序当前使用python-memcached API来设置和获取memcached中的对象.此API使用Python的本机pickle模块来序列化和反序列化Python对象.

这个API使得在memcached中存储嵌套的Python列表,字典和元组变得简单快捷,将这些对象读回应用程序是完全透明的 - 它只是起作用.

但我不想仅限于使用Python,如果所有的memcached对象都是用pickle序列化的,那么用其他语言编写的客户端将无法工作.

以下是我考虑过的跨平台序列化选项:

  1. XML - 主要的好处是它是人类可读的,但在这个应用程序中并不重要.XML也占用了大量空间,解析起来也很昂贵.

  2. JSON - 似乎是一个很好的跨平台标准,但我不确定它是否在从memcached读回时保留了对象类型的特征.例如,根据这个帖子,当使用simplejson时,元组被转换为列表; 此外,似乎向JSON结构添加元素可能会破坏写入旧结构的代码

  3. 谷歌协议缓冲区 - 我真的很感兴趣,因为它看起来非常快速和紧凑 - 至少比XML小10倍; 它不是人类可读的,但对于这个应用程序来说并不重要; 它似乎旨在支持增长结构而不破坏旧代码

考虑到这个应用程序的优先级,memcached的理想对象序列化方法是什么?

  1. 跨平台支持(Python,Java,C#,C++,Ruby,Perl)

  2. 处理嵌套数据结构

  3. 快速序列化/反序列化

  4. 最小内存占用量

  5. 灵活地改变结构而不破坏旧代码

python serialization memcached xml-serialization protocol-buffers

24
推荐指数
2
解决办法
2万
查看次数

如何管理哪些数据同步到Meteor客户端的缓存?

我修改了排行榜示例以使用两个集合:

Players = new Meteor.Collection("players");
Tasks = new Meteor.Collection("tasks");
Run Code Online (Sandbox Code Playgroud)

Players集合具有示例中定义的6个文档.

> db.players.count()
6
Run Code Online (Sandbox Code Playgroud)

Tasks集合有48,000个文档.

> db.tasks.count()
48000
Run Code Online (Sandbox Code Playgroud)

一旦打开浏览器,Node就会跳转到100%CPU,客户端无法看到任何任务记录.

Players.find().count()
6
Tasks.find().count()
0
Run Code Online (Sandbox Code Playgroud)

我尝试定义查询条件,但这只适用于服务器,对客户端没有帮助.

Players.find({name:"Claude Shannon"}).count();
1
Tasks.find({tid:"t36254"}).count();
0
Run Code Online (Sandbox Code Playgroud)

我猜测48,000个文档太多无法同步.这导致Node以100%CPU和客户端挂起这样的错误:http://i.imgur.com/zPcHO.png.

如何防止同步所有内容并仅从集合中检索特定文档?

meteor

6
推荐指数
1
解决办法
2456
查看次数