java memcached 存储对象_java – 从Memcache中获取低级别数据存储区实体对象时的慢速反序列化...
事实证明,检索存储内存缓存的低级数据存储实体非常缓慢.由于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中获取低级别数据存储区实体对象时的慢速反序列化...相关推荐
- Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/123536470 红胖子(红模仿)的博文大全:开发技术集 ...
- java hashmap 转对象_Java – 从HashMap中获取正确的转换对象
我正在开发一个具有多个系统的应用程序(在我的例子中,系统是我的应用程序中的可加载组件,它处理特定任务,例如:翻译,配置处理,音频等--).这些系统共享一些常用方法,因此我创建了一个接口: public ...
- java静态注解处理器_java – 使用mapstruct中的builder(使用immutables注释处理器)将对象映射到不可变对象...
我们使用 immutables framework生成所有DTO.现在我们想用 mapstruct将这些对象映射到另一个.但生成的DTO是不可变的,没有setter,也没有构造函数,对应于builde ...
- java后台接收数据格式_Java后台基于POST获取JSON格式数据
1.直接使用request.getParamater()的方法获取(这种取参方式对于POST和GET的提交方式均适用): 2.通过请求体的IO流获取参数(这种方式只能用于POST,因为GET方式没有请 ...
- Android中的5种数据存储方式
Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...
- python读二进制格点雷达基数据_对numpy中二进制格式的数据存储与读取方法详解...
使用save可以实现对numpy数据的磁盘存储,存储的方式是二进制.查看使用说明,说明专门提到了是未经压缩的二进制形式.存储后的数据可以进行加载或者读取,通过使用load方法. In [81]:np. ...
- 解决从json文件中获取不到数据的问题
解决从json文件中获取不到数据的问题 参考文章: (1)解决从json文件中获取不到数据的问题 (2)https://www.cnblogs.com/yhyanjin/p/7214776.html ...
- Qt 中获取摄像头图像数据的方法
Qt 中获取摄像头图像数据的方法 在 Qt 中提供了 QCamera 类用来操作摄像头.(这里的摄像头指的是电脑上常用的那种 USB 摄像头或网络摄像头,暂时还不支持工业相机.)摄像头获取的实时图像可 ...
- java.io包对象读写_java.io 包中的____________和____________类主要用于对对象(Object)的读写_学小易找答案...
[多选题]连铸钢水成分控制的要求有( ). [单选题]起动机用直流电动机将电能转化为 [单选题]下列关于我国少数民族传统禁忌的说法中,错误的是( ). [多选题]下列选项中 , 属于表单控件的是 ( ...
最新文章
- python-- Image 模块
- python支持的数据类型list_Python基本数据类型之list
- ajax实现动态及时刷新表格数据_如何爬取网页数据
- 在Windows10上安装ROS并测试
- 贪吃蛇游戏(附源码)
- 智能安防新时代:用户、SI、设备制造商要做什么?
- Desktop OS Market Share: Windows 90% - Mac 9% - Linux 1%
- php 获取 table,php – 获取表对象(App_Model_TableName)作为获取结果(Zend Framework)
- python停止运行_python停止不了
- (转)【MySQL】sync_binlog innodb_flush_log_at_trx_commit 浅析
- CentOS 6.0 + Zabbix 1.8.5 服务器端安装
- PHPnow中ZendDebugger与ZendOptimizer 共存
- Mysql基本语句(个人笔记)
- java程序员的基本修养_疯狂Java程序员的基本修养 (李刚著) pdf扫描版[63MB]
- 企业微信接口下载微盘文件
- ffmpeg的一些用法,不定期更新
- 实时视频流:工作原理
- 数据科学家的修行之路---基本功
- 转子豪兄 树莓派上安装OpenCV
- CSS快速学习(2021.2.7-15)
热门文章
- 加载部分神经网络预训练参数后改写网络的方法
- 《Learning Scrapy》(中文版)第11章 Scrapyd分布式抓取和实时分析
- 图像编程魔法门(By C#) 目录
- .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来
- 数据仓库专题18-数据建模语言IDEF(转载)
- FASHION STORE OPENCART 2.X 自适应主题模板 ABC-0588
- 第十六章 贪心算法——0/1背包问题
- POJ 3368	Frequent values 线段树区间合并
- 最怕的是,你永远也忘不掉 BY顾明烟
- 2416开发板上网卡芯片lan9220的时序配置问题