随笔(2014.7)

      1. DSQL, ESQL, PSQL

      DSQL概念不大确定,(DSQL语言难道是在iSQL工具下运行的么)ESQL可以参考百度百科,简单来说是可以在其他高级语言例如C语言中直接写SQL语句,然后用另外一个工具去编译这个C语言,听着就麻烦,大型工程编译岂不是很麻烦,一般是直接用特定数据库提供的接口去执行特定的语句。PSQL应该就是存储过程中的,还有一个iSQL,是用工具直接访问数据库时候的一个工具。也可以理解为ESQL、PSQL、ISQL(DSQL?)都是一种特定情况下使用语言,有着不同的编译器。

 

Description: Executes a block of PSQL code as if it were a stored procedure, optionally with input and output parameters and variable declarations. This allows the user to perform “on-the-fly” PSQL within a DSQL context.

      这是firebird guid这说明execute block的作用,可以在“DSQL context”下运行一个正在传输来过的PSQL语句,这个DSQL context不就是用iSQL工具执行的么,所以推断这个DSQL就是在iSQL工具中也就是“DSQL context”中的语言。

 

      set term ; ^ 的解释,参考:http://www.cnblogs.com/fyen/archive/2011/05/10/2042726.html
“在存储过程中,除了Create Procedure,As,Begin…End语句之外,任何其他语句末尾都要添加分号结束。因此,如果你使用isql创建存储过程,你必须另外定义其它的符号来代表创建存储过程的结束,通常使用set term语句完成。比如,在创建存储过程之前,使用set term !! ;把!!作为分号来表示存储过程创建的结束,在创建存储过程的语句之后,再用set term ; !!恢复分号的作用。”

      为什么这样呢,因为在isql中是“面向行”的,也就是一行一行的执行,其实也就是找“;”去执行,但是存储过程创建有很多行组成一个真正的“行”,面向对象的角度来说就是聚合了下,所以需要把别的符号定义成“;”,也就是说用另外一个“启动执行”标志。

 

      2. sip为不定长协议,不定长协议解析可能会慢但是有效利用带宽。sip可读的优点数据的透明和便于排查问题,扩展性强,但是数据冗余。
二进制协议: C/S要共享同样的数据结构,有编译依赖关系,或者代码copy,  可用于内部通信协议,或者出于保密原因的通信鞋议。比较高效,cpu不用解析文本,带宽少。
总的来说,这就是一个平衡的过程。如果消息体不是很小(比如每次只传一个字节的消息就很小了),那么采用文本协议还是值得的。毕竟文本协议简单,好扩展,利于调试。

 

      3. base64编码会膨胀30%,编码中没有'\0',编码用255个字符。

 

      4. 协议中起始字符和结束字符的作用,既然协议都有length + content的方式来搞,那么结束字符,起始字符有什么用呢?他们的存在可以在长度与内容不匹配的时候丢掉坏包,从而不影响后面的包的传输。这个和加入应用层的crc校验是一个道理,一般客户端会断开重连。

 

      5. 解耦处理方法,为了防止资源需求变动,不同业务需要不同资源,可以对资源进行统一管理,放入一个资源队列,单独线程分发,这样上层业务改变,只要变动处理策略。以前是一个资源生成后发送到“应该”需要的地方,但是需求变化可能会有不同。解耦方法是把所有资源统一管理起来,这样可以以后变更容易实现,多了一层资源聚合的步骤。

 

      6. 订阅方法的局限性:1)处理上可能有歧义,例如一条协议被两个地方订阅,那么中心分发的时候会给两个地方发送,这样就会回复两条协议,可能业务上只需要一条协议应答。2)分布式的时候,如果一条协议处理在同一个服务器很吃力,那么分布式的时候如果只是通过这样简单的订阅可能重复处理。

 

      7. 提供代理服务器所需要使用的本地路由策略,本地路由策略是代理必须所要经过的路由集合。

 

      8. 设计的时候可能有多余的流程与代码,只是为了实现方便统一,可能以一个对话框作为一个对象,而没有细化,比如对话框有几个tab,在修改一个tab时候,其他tab保存协议也一起发送。开发效率高,错误少,但是协议有冗余。

 

      9. 为什么选择firebird?首先是小,跨平台,有存储过程等等。对其他接触不多,但是从网上看比Access、SQLite性能更好,更简单。

 

      10. 设备删除的时候先数据库,在通知各个服务器缓存,还是先通知缓存,再删除数据库?系统中是先删除数据库,再通知,删除数据库失败的可能性大。其实这个是一个有争议的问题,处理方法一是先删除数据库,再删除缓存失败后反复发送消息删除,一直到缓存删除,或者超时再回复删除请求,但是这样应答时间会挺长,而且如果一直删除失败数据库要不要rollback?

 

      11. 如果数据传输慢,多开几个同样的进程使用不同端口会有速度提高么?应该不会这个应该和网卡有关系,与端口多少没有关系,端口只是一个操作系统逻辑上的概念,真正传输的物理上的限制是带宽与网卡。

 

      12.历史数据查询时候,查询一个设备的时候,返回结果每个数据点都有设备名字、id、等等冗余的字段,不仅带宽浪费,而且解析时候速度慢,对资源消耗大。可以优化返回结果,去除冗余字段;还可以在xml结果中直接用二进制协议编码方式,进一步减少所用空间,提高解析效率,但是需要在定义解析规则。

 

      13. 历史数据查询返回协议数据量大也可以不通过中心服务器,给中心减少点压力,中心可以做的跟cpu似的,数据不一定经过寄存器才到内存,可以从硬盘直接到内存(DMA)。可以与视频流流程类似,历史数据查询结果可以直接给客户端,中心只是一个控制作用,告诉设备接入服务器该把协议结果返回到哪里就可以了。

 

      14.中心很多设备不必加载,只加载有路由信息的设备即可,中心相当于路由功能,客户端显示设备列表是从数据库自己加载的,在增删改查的时候,设备应该有带路由的父设备。

 

      15.visitor可以解决设备访问的问题,把遍历访问方法的职责核心类不做,只是提供一个开发的visitor方法,visitor方法也是逐个判断是否是自己需要的对象,访问或者保存。这个模式感觉作用不大,核心类完全可以把自己的要访问的东西提供一个类似迭代器的访问方法,返回一个count,用一个GetObj(Offset)的方法来遍历。

 

      16. 向上对接,如果是站端对接,一个变电站对接,可以做成轻量级的东西,和das放在一起,这样如果所有设备都通过das接入,用通过das向上对接,那么可以直接去das上下文中获取数据,do操作等。如果是整个系统向上对接,例如一个地市的变电站主站向一个省站的变电站主站对接,可以单做一个向上对接的服务器。

 

      17. SimpleNetMsg作用可以提供一种复制部分NetMsg的Response方法,减少不必要的拷贝,关键是这样可以让部分逻辑只关注NetMsg的Response,而看不见resquest部分。

 

      18. Overflow occurred during data type conversion.
conversion error from string "". firebird 报的错误,问题就是那个时间的类型,不能用‘’空去传进去,必须是2014-07-10 00:00:00这种格式

 

      19. missing ';' before 'namespace' 类的最后没有加分号,太坑了什么编译器

 

      20. SimpleNetmsg m_msg; 
 CProtocolData proData;
 proData.Parse(m_msg->GetXMLData(), m_msg->GetXMLDataSize());
 CElement ele = proData.GetElement("Message/IE_ZXPIS_DEVICE_QUERY_BY_DAS");
 ele.SetAttribute()并没有起到作用
 首先有一个const修饰,这就导致了肯定是没法修改的,然后再parse后proData其实是用char *的一个字符串构造了proData中的元素树,SetAttribute方法其实只是对CProtocolData中结构元素树改变,而m_msg中->GetXMLData()是一个char*,两个完全不一样的结构体,肯定是不会有同步什么的了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: typora.7z 是一款非常实用的程序员笔记软件。它采用了简洁的设计风格,提供了丰富的文本编辑功能,帮助程序员能够轻松记录和管理自己的代码和笔记。 typora.7z 的主要特点有以下几点: 首先,typora.7z 提供了所见即所得的编辑界面,简化了程序员的操作过程。用户可以直接在编辑界面中进行文本的编写,并实时预览效果,无需频繁切换窗口或刷新页面。这种所见即所得的编辑方式使得程序员可以更加专注于内容创作,提高了工作效率。 其次,typora.7z 支持各种主流的格式和语法。程序员可以使用Markdown语法进行文本的编辑,这种语法简单易学,能够很方便地实现标题、列表、代码块等常用功能。此外,typora.7z 还支持LaTeX数学公式、流程图、时序图等特殊格式的插入,满足程序员在编写技术文档时的多样化需求。 此外,typora.7z 还提供了丰富的自定义选项。用户可以根据自己的喜好设置字体、主题、布局等,使得编辑界面更符合个人阅读习惯。而且,typora.7z 还支持导出为多种格式,如PDF、HTML、图片等,方便用户在不同场景下使用和分享笔记。 最后,typora.7z 还具备云同步功能。用户可以将自己的笔记存储在云端,实现多设备之间的数据同步,方便用户随时随地查看和修改笔记,无需担心数据的丢失。 总之,typora.7z 是一款功能强大、操作简单的程序员笔记软件。它的所见即所得编辑界面、支持多种格式和语法、提供自定义选项和云同步功能,使得程序员能够更加方便、高效地记录和管理自己的代码和笔记。无论是在日常开发中,还是在技术分享和学习中,typora.7z 都是一个不可或缺的好帮手。 ### 回答2: Typora是一款设计简洁、功能强大的程序员笔记软件。它支持多种主题选择,包括黑暗模式,让用户可以自定义界面以适应不同的工作环境和个人喜好。与其他笔记软件相比,Typora的最大特点是采用所见即所得的编辑方式,用户可以直接在编辑文本的同时预览所产生的效果。这使得编辑笔记变得更加直观、高效。 Typora支持多种常用的文本编辑功能,如插入图片、表格、代码块等。它还支持LaTeX数学公式的编辑和渲染,方便用户在笔记中添加专业的数学公式。此外,Typora还内建了Markdown标记语言的支持,使用户能够借助简洁易懂的标记语言来编辑和格式化笔记。 Typora还提供了一系列便捷的功能,如自动补全、实时字数统计等,帮助用户提高工作效率。用户可以通过内建的全局搜索功能轻松查找到所需的笔记内容。并且,Typora支持将笔记导出为多种格式,如HTML、PDF等,方便用户在不同的场合下使用。 总的来说,Typora是一款非常实用的程序员笔记软件。它的所见即所得编辑方式和丰富的功能让程序员可以更方便地记录和管理工作中的笔记。无论是写代码、学习笔记还是个人随笔,Typora都能满足用户的需求。无论你是初学者还是资深程序员,Typora都值得一试。 ### 回答3: Typora是一款功能强大的程序员笔记软件,它以其简洁、高效和易用的特点受到了广大程序员的喜爱。 首先,Typora的界面简洁清爽,没有繁琐的功能按钮和复杂的布局,用户可以专注于写作和笔记,而不会被繁杂的界面干扰。它采用所见即所得的编辑模式,即用户在编辑窗口中所看到的就是最终的展示效果,无需频繁切换编辑和预览界面。 其次,Typora支持多种编程语言的语法高亮,在编写程序代码时能够清晰地突出显示关键词和语法结构,让代码更加易读易懂。此外,Typora还支持数学公式的编辑和渲染,可以方便地插入数学符号和公式,适用于编写技术文档、学术论文等需要使用数学公式的场景。 另外,Typora还具备一些便捷的编辑和排版功能,例如自动补全括号、手势操作、实时预览、导出多种格式等。使用Typora可以通过简单的快捷键或手势操作实现文档的快速编辑和格式调整,提高了写作效率。 最后,Typora支持各种主流平台,包括Windows、Mac和Linux,用户可以在不同操作系统上无缝切换使用。此外,Typora还可以与其他云端存储服务(如GitHub、Dropbox)进行集成,方便用户进行数据备份和共享。 总之,Typora作为一款优秀的程序员笔记软件,以其简洁、高效和易用的特点,满足了程序员在编写笔记和技术文档时的各种需求,为程序员提供了一个舒适的写作环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值