文档章节

2013年下半年年终总结(下)

zzuGiser
 zzuGiser
发布于 2014/01/21 14:23
字数 1280
阅读 333
收藏 2
点赞 0
评论 0

        第一件事情,在C++端实现RPCRemote Process Call)远程过程调用,C++端的RPC是模仿Go语言 的RPC实现的,其基础是培升写的多线程模型(也是多进程框架的基础中的基础)。RPC机制是由服务端和客户端组成,在多进程框架中一个基础服务,如DBServiceAEServiceCadService可以看做是服务端,业务服务调用基础服务时作为客户端,界面服务调用业务服务时,业务服务又成了服务端。RPC数据传输格式有多种,可以为XMLJsonGob等,其中Json的数据量比较小,编码性能比较高,目前使用比较广泛,我们也采用Json作为数据传输格式。

        遇到的问题:Json解析的性能问题,函数调用是很频繁的,在常规情况下,2.3GHzCPU1s中能够执行1000 000次加法。经测试,Json解析的消耗是RPC远程调用消耗时间最多的。市场上有很多Json解析库,如JsonKitJsonCPPCJsonLibJson等等,采用的算法大部分为状态机,但是其性能都不是很高,不能满足C++端的RPC调用。因此决定重新实现Json字符串解析。

        这里只从整体上给出解决方案,如有朋友想有更深入的了解的话,可以与我联系,一起探讨学习。

        解析优化方案:Json字符串可以与C++中的结构体一一映射,因为结构体可以套结构体,因此解析的时候每一次取值,只取第一层的,并对其位置建立索引。Json解析过程中,实现0拷贝,大大简化了解析性能。

        编码优化方案:在Json对象内部采用多级缓冲的机制,去存放Json字符串。插入一条键值对时,计算键值对长度,如果第一级可以存放,则在第一级字符串的末尾追加键值对,键与键之间、键与值之间、值与值之间采用0字符分给,同时把键与值位置记录在索引中。删除一个键值对,只要从索引中删除就可以了。修改的话,就先删除索引,再执行插入。从而是解码过程中,实现0次拷贝,优化性能。

        第二件事情,实现转换测试多进程框架,这个是业务的东西,就不多说了。

        第三件事情,测试AE性能(这个叫坑啊,坑死我了),实现动态调图。

        测试AE性能,真是坑人啊,整个公司CAD组也存在将近十几年了,组里面的人大家竟然一口同声的说AE提供的C++ COM接口性能低,让我这个新人深信不疑。让我从其他方向提供SDE接口性能,项目经理明确指出研究SDE Oracle表结构,直接从Oracle表中,获取图层信息,实体信息。大概研究了1个月时间,了解了SDEOracle中存储,以及实体的几何信息存储位置。但是,问题来了,几何的实体字段存储格式是ESRI加密的,非要调用SDE提供的Oracle包才能解析出来。这下麻烦来了,Oracle包是在服务器上执行的,也就是说是由Oracle执行包代码,我们管不了了,想利用多线程,多进程去解析没门,也就是说性能没法提高了。进入了一个死胡同了...

        回过头来重新思考,ESRI的人应该不是吃干饭的,估计是他们使用的问题(因为AE接口是一个资深的元老级人物写的,大家都不愿看他的实现,即使看了,看出问题也没人愿意提出来,这些是中国国情导致的,没办法)。经追溯确实是这样,大不敬了。但是没办法有问题就是有问题,经再三思考下,还是提出来了,重新实现了一套接口,问题解决。

        下面就是动态调图了,在CAD上动态调图其实就是模仿着百度地图、谷歌地图这些Web地图查看器做的。功能上也就是在CAD上拖拽、放大视图时,动态加载地图。

        动态调图的核心思想是按照缩放级别, 对图层建立金字塔。其实说白了就是个四叉树,根据当前的缩放级别,以及位置,确定树的深度和节点索引,从而确定节点。而根据图层建立的四叉树,每个节点上是和若干个图层,以及一个范围绑定的,这样就可以根据范围从绑定的图层上取实体数据了。

        


在这就不详说了,大家有兴趣的话,给我留言。到时候我会根据情况,以及大家感兴趣点,写几篇文章出来,大家一起讨论。




© 著作权归作者所有

共有 人打赏支持
zzuGiser
粉丝 1
博文 4
码字总数 3825
作品 0
郑州
2016我的JFinal年终总结

零、简介 大家好,我是小木,三年连续创业者,国内JFinal框架资深实践者和讲师,全栈程序猿一枚。 一、缘起 与JFinal,我们算是偶遇,但也是必然。 我从08年就注册了开源中国网站会员,比较关...

山东小木
2016/12/23
170
3
致即将逝去的2016 【再出发】

2016年还有最后的2个工作日,也该写写年终总结了,我把2016年的年终总结主题定义为【再出发】。 关于工作 2015年底,由于一些原因,告别一个日活过200W的超级App,移交给别的团队。回想起自己...

hsbirenjie
2016/12/29
0
0
2017 年终总结 | 重要的不是前事不忘, 而是未来可期

date: 2017-9-21 22:10:43 title: 2017 年终总结 | 重要的不是前事不忘, 而是未来可期 这是 「正儿八经」 写年终总结的第 2 年. 我更喜欢另一个说法: 「又到了立 flag 的时候了」. 写这篇年终...

daydaygo
01/03
0
0
2017年终总结,一个不顺心的槛年

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/78866723 2017就这样在不知不觉中又过去了。由于明天大家就都放假了,因此今年的年终总结我只好提前两天发布吧。 这已经...

sinyu890807
2017/12/21
0
0
2014年年终总结

其实2014年的年终总结早该完成了,只是一直没开始写,也觉得没什么可写,希望以后更有目标些。总体来说除了工作外的收获如下,后期在细细的总结: 通过了2门IT认证考试,这个当然是公司自己的...

marvelyu
2015/01/12
0
0
报告称全球 97% 的手机病毒源自 Android

据芬兰计算机与网络安全服务商F-Secure最新发布的《2013年下半年安全威胁》报告显示,2013年Android平台上的恶意软件数量占整体移动恶意软件数量的97%,而2012年的该比例为79%。报告称,去年...

oschina
2014/03/25
2.3K
24
2017年年终总结

前言 不知不觉,2017年又接近尾声了,又到了该写年终总结的时候了,往年这个时候都会熙熙攘攘,各大平台提早预热过年的气氛,而今年显得格外的平静,这可能正如我的现在的心境,波澜而不惊!...

韩俊强
01/03
0
0
Digg 宣布要打造 Google Reader 替代品

Digg官方博客今天借势宣布他们要打造一个Google Reader替代品。 他们说也许很多人都说RSS是过去的事物了,但作为一个每天数小时的Google Reader用户,他们说服了自己这是一个值得挽救的产品,...

oschina
2013/03/15
3.1K
14
2017 年终总结

又到了一年的这个时候了,无论怎样,总得总结一下今年做的事情,展望一下明年的。总结是为了更好的回顾这一年做的事情,展望则是为了更好的规划一下未来。 工作 稳定性 先来说说稳定性,随着...

siddontang
2017/12/30
0
0
100位软件测试从业者的年终总结(附年终总结大纲)

Hello ,All Tester ,我是IDO老徐 。 时间真快,又一年过去了 。 16年底,老徐写了两篇关于年终总结的文章 。 1. 老徐个人的年终总结 我花了两个小时,写了这份年终总结 。 2. 年终总结的大...

IDO老徐
2017/12/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
2
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部