事实证明,检索存储内存缓存的低级数据存储实体非常缓慢.由于objectify将实体缓存为低级数据存储区实体类型,因此当使用objectify从memcache中获取许多实体时,这会导致性能不佳.

真正的问题是为什么从memcache反序列化实体类型的速度慢?我整理了一个示例项目来演示从memcache与普通字符串或简单Map中检索实体的差异.

这是代码:

此外,我部署了它,因此您可以看到它在生产中有多大差异:aleemsandbox.appspot.com/perftest.它是一个天真的探测器,但它确实表现出巨大的性能差异.刷新页面几次以查看差异.这是一些示例输出:

Storing String Data Test

-------------------------

generateData: 0ms

storeData: 10ms

fetchData: 9ms

Storing Map Data Test

-------------------------

generateData: 0ms

storeData: 21ms

fetchData: 92ms

Storing Entity Data Test

-------------------------

generateData: 69ms

storeData: 24ms

fetchData: 792ms

第一部分显示了在memcache中存储1000个字符串然后立即获取它所需的时间.下一个示例对1000个Map对象执行相同操作,最后一个示例存储并检索1000个低级实体类型.您可以看到检索实体类型的时间增加.

任何想法为什么实体可能很慢从memcache反序列化?

更新1

根据其中一个答案中的建议,我还记录了存储在memcache中的对象的累积大小,结果没有打印出来.我还添加了另一个测试用例 – 而不是直接存储实体,而是首先将Entity序列化为byte [],然后将其存储在memcache中.结果如下:

StringBenchmark

----------------

Average Fetch Time: 40.16ms

Fetch Size: 24.41KB

MapBenchmark

----------------

Average Fetch Time: 27.36ms

Fetch Size: 102.54KB

EntityBenchmark

----------------

Average Fetch Time: 1029.88ms

Fetch Size: 463.87KB

EntityPreSerializedBenchmark

----------------

Average Fetch Time: 218.82ms

Fetch Size: 490.23KB

这里有趣的是最后两个结果.尽管它们的大小大致相同,但手动获取和反序列化byte []需要大约1/5的时间.

github repo中的代码已更新,部署的示例应用程序也有最新代码,因此可以随意在此处运行此测试并查看结果.

java memcached 存储对象_java – 从Memcache中获取低级别数据存储区实体对象时的慢速反序列化...相关推荐

  1. Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/123536470 红胖子(红模仿)的博文大全:开发技术集 ...

  2. java hashmap 转对象_Java – 从HashMap中获取正确的转换对象

    我正在开发一个具有多个系统的应用程序(在我的例子中,系统是我的应用程序中的可加载组件,它处理特定任务,例如:翻译,配置处理,音频等--).这些系统共享一些常用方法,因此我创建了一个接口: public ...

  3. java静态注解处理器_java – 使用mapstruct中的builder(使用immutables注释处理器)将对象映射到不可变对象...

    我们使用 immutables framework生成所有DTO.现在我们想用 mapstruct将这些对象映射到另一个.但生成的DTO是不可变的,没有setter,也没有构造函数,对应于builde ...

  4. java后台接收数据格式_Java后台基于POST获取JSON格式数据

    1.直接使用request.getParamater()的方法获取(这种取参方式对于POST和GET的提交方式均适用): 2.通过请求体的IO流获取参数(这种方式只能用于POST,因为GET方式没有请 ...

  5. Android中的5种数据存储方式

    Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...

  6. python读二进制格点雷达基数据_对numpy中二进制格式的数据存储与读取方法详解...

    使用save可以实现对numpy数据的磁盘存储,存储的方式是二进制.查看使用说明,说明专门提到了是未经压缩的二进制形式.存储后的数据可以进行加载或者读取,通过使用load方法. In [81]:np. ...

  7. 解决从json文件中获取不到数据的问题

    解决从json文件中获取不到数据的问题 参考文章: (1)解决从json文件中获取不到数据的问题 (2)https://www.cnblogs.com/yhyanjin/p/7214776.html ...

  8. Qt 中获取摄像头图像数据的方法

    Qt 中获取摄像头图像数据的方法 在 Qt 中提供了 QCamera 类用来操作摄像头.(这里的摄像头指的是电脑上常用的那种 USB 摄像头或网络摄像头,暂时还不支持工业相机.)摄像头获取的实时图像可 ...

  9. java.io包对象读写_java.io 包中的____________和____________类主要用于对对象(Object)的读写_学小易找答案...

    [多选题]连铸钢水成分控制的要求有( ). [单选题]起动机用直流电动机将电能转化为 [单选题]下列关于我国少数民族传统禁忌的说法中,错误的是( ). [多选题]下列选项中 , 属于表单控件的是 ( ...

最新文章

  1. python-- Image 模块
  2. python支持的数据类型list_Python基本数据类型之list
  3. ajax实现动态及时刷新表格数据_如何爬取网页数据
  4. 在Windows10上安装ROS并测试
  5. 贪吃蛇游戏(附源码)
  6. 智能安防新时代:用户、SI、设备制造商要做什么?
  7. Desktop OS Market Share: Windows 90% - Mac 9% - Linux 1%
  8. php 获取 table,php – 获取表对象(App_Model_TableName)作为获取结果(Zend Framework)
  9. python停止运行_python停止不了
  10. (转)【MySQL】sync_binlog innodb_flush_log_at_trx_commit 浅析
  11. CentOS 6.0 + Zabbix 1.8.5 服务器端安装
  12. PHPnow中ZendDebugger与ZendOptimizer 共存
  13. Mysql基本语句(个人笔记)
  14. java程序员的基本修养_疯狂Java程序员的基本修养 (李刚著) pdf扫描版[63MB]
  15. 企业微信接口下载微盘文件
  16. ffmpeg的一些用法,不定期更新
  17. 实时视频流:工作原理
  18. 数据科学家的修行之路---基本功
  19. 转子豪兄 树莓派上安装OpenCV
  20. CSS快速学习(2021.2.7-15)

热门文章

  1. 加载部分神经网络预训练参数后改写网络的方法
  2. 《Learning Scrapy》(中文版)第11章 Scrapyd分布式抓取和实时分析
  3. 图像编程魔法门(By C#) 目录
  4. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来
  5. 数据仓库专题18-数据建模语言IDEF(转载)
  6. FASHION STORE OPENCART 2.X 自适应主题模板 ABC-0588
  7. 第十六章 贪心算法——0/1背包问题
  8. POJ 3368 Frequent values 线段树区间合并
  9. 最怕的是,你永远也忘不掉 BY顾明烟
  10. 2416开发板上网卡芯片lan9220的时序配置问题