热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ODBC连oracle,比起Pro*C和OCI能慢多少?另求对设计的改进。

基本已经确定生产环境至多是PC服务器,不会超过几十万吧,IO性能是相当有限的,加上数据表少,就两张,已经用顺序结构全预读了(直接用用户ID索引,不会比这个更快了,ID上限是百万级的,至多消耗几百MB内
基本已经确定生产环境至多是PC服务器,不会超过几十万吧,IO性能是相当有限的,加上数据表少,就两张,已经用顺序结构全预读了(直接用用户ID索引,不会比这个更快了,ID上限是百万级的,至多消耗几百MB内存),同步回写机制方面也已经考虑周全,数据读取这块应该不是瓶颈了。

还采用了“预计算”机制,通过设计交互协议,让本地的计算基本能够不依赖请求的数据,服务器空闲的时候就用“预计算”生成了多条候补数据,请求过来直接回复。

通过这样的设计让服务器的处理请求能力最大化了,目前测试只要“预计算表”还有数据候补,速度瓶颈就是千兆网卡(用WSAEventSelect模式的UDP,这一块暂时不想用更高级的,性能提高不了太多的),可以说处理性能已经优化到极限了。

问题主要是同步回写这块,数据库回写速度有限, “预计算表”定的很大的话,我有意制造持续的峰值请求会造成数据回写队列严重积压,内存占用升高。odbc驱动的性能相对来说比oracle原厂提供的连接方式是要慢的,数据库方面我不太熟悉,没用过oracle原厂的,odbc相对能慢多少呢?

如果说不是慢一个数量级或许多倍,而仅仅是慢几成,就算了,现在效率是够的,而且我开发机器还懒得装笨重的oracle呢,现在一直利用着odbc的通用性,装轻量级的MySQL在开发……只是觉得我为了oracle的回写慢去刻意限制精心设计的数据预读和处理流程的速度防止爆内存,有点不爽,比如我会限制较小的预计算条数,预计算候补用完了,处理速度自然降下来(因为有硬件加密卡,即便用多块也是明显瓶颈),也给了oracle喘气的时间。

如果确实快一个很多,我考虑换oracle原厂连接,网上的测试数据很多不靠谱,就和编程语言的效率评测一样。

或者大家针对这个问题还有什么其他点子。

强调一下,数据表是极其简单的,可能和某些本科生的课程设计复杂度都差不多,数据索引和SQL语句优化基本没有什么空间,ODBC层级的优化已经做了。NoSQL之类的我推荐过,但需求方坚持oracle,说是“放心”。因为这是一个专用通信系统的鉴权服务器,电信级的,数据安全很重要的,需求方可能会购买全套的oracle数据安全技术和服务(数据热备等)。

15 个解决方案

#1


不懂帮顶
sf

#2


简单点说,就是想在一台比高档PC强不了多少的服务器硬件上,尽量实现最高的处理速度……

#3


我们现在用的测试服务器,机架式,价格应该就几万吧,最多不超过10万,4个CPU,每个4核,32GB内存,确实不比那些工作站级的台式PC强到哪里去

#4


另一台更矬,2个CPU,每个四核,4GB内存,比开发用机i5+4GB都好不了多少,只是这台准我乱搞

#5


不知道怎么开始了解。。。

#6


不知道怎么开始了解。。。

#7


楼主,有没有尝试用用OTL这个库呢,它直接封装好了OCI。

#8


机器人走了吧,否则都不敢顶起来

#9


帮你顶一下,最好去数据库版问问

#10


oracle那边人不多,先放几天,没人就转过去

#11


学习某人上个几G内存

ODBC的驱动也没那么慢吧,反正我没比较过

#12


看你的描述,你的缓存机制好像是write through,如果用write back机制会怎么样?还有,数据缓存可以多做几级,一级缓存放内存,二级缓存放磁盘.磁盘要换出时才写回.
至于数据访问的性能,ODBC的应该可以做到基本和原生API持平的.除非原生API有专门处理海量数据的特殊方法.这个没有研究过...或者你可以在应用服务器端把数据压缩打包,交由数据服务器直接处理,以减少通信瓶颈的压力.这应该可以提高很多的性能.如果你的瓶颈是数据服务器的处理能力,那就只有换硬件了.呵呵

你的数据结构和处理方式不明确,很难帮你想什么其它的办法.

#13


引用 12 楼 redleaves 的回复:
看你的描述,你的缓存机制好像是write through,如果用write back机制会怎么样?还有,数据缓存可以多做几级,一级缓存放内存,二级缓存放磁盘.磁盘要换出时才写回.
至于数据访问的性能,ODBC的应该可以做到基本和原生API持平的.除非原生API有专门处理海量数据的特殊方法.这个没有研究过...或者你可以在应用服务器端把数据压缩打包,交由数据服务器直接处理,以减少通信瓶颈的压力.……


本身数据库已经全预读了,对数据库只有写操作,数据库本身的后写缓存应该就能起到二级缓冲的作用

odbc真的和原生api一样?我看了许多说法都说odbc在M$提供的的通用接口里都算慢的

#14


>
本身数据库已经全预读了,对数据库只有写操作,数据库本身的后写缓存应该就能起到二级缓冲的作用
你没理解我说的重点.根据你的描述,瓶颈应该是在写数据库这个交互过程中.那就要想办法消除这个过程.我说的write back以及磁盘缓存机制,就是为了在应用服务器端做更多的写入合并,以减少和数据库交互的过程.

>odbc真的和原生api一样?我看了许多说法都说odbc在M$提供的的通用接口里都算慢的
odbc的性能和具体驱动的实现有关.Oracle的ODBC驱动到底性能如何,我也不知道.只是想当然的认为,是可以实现出与原生API性能差不多的驱动的.因为ODBC的封装层次足够简单,MS根本就没做什么事.
因为不知道你做数据写回是怎么实现的,所以没法确定怎么优化.我在上面提出,最好把数据压缩打包,交由数据服务器实现写回的动作,就是为了避免应用服务器端执行查询产生的复杂交互动作.比如:你把100条要写回的数据组织成XML,然后在数据库服务器上用存储过程解析,写入.肯定比100条数据分别在应用服务器端写入来得快得多.因为打包写入只产生一次查询交互,分别写入则会产生100次.如果你能把数据再压缩成2进制的,还能极大得减少应用服务器和数据服务器的交互数据量.

#15


其实我是来打酱油的哦

推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
author-avatar
叶葳蕤1095190287
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有