使用timesten for java
i.    Java类
   想链接timesten ,在你的java类中你需要引入标准jdbc 包(java.sql.*)如果你想使用数据源你还需要引进包javax.sql.*包。Timesten   提供了对标准java标准包的扩展。
     com.timesten .jdbc .DataSource 实现了javax.sql.DataSource接口
    com.timesten .jdbc .TimesTenVendorCode 实现了javax.sql.XADataSource接口
    com.timesten .jdbc .TimesTenConnection 实现了java.sql.Connection接口

ii. 链接timesten
在操作手册中讲解了如何创建一个DSN来定义一个到timesten 的连接。你创建的DSN的类别取决于你创建的链接是直接连接数据库还是通过一个客户端。当你创建完一个DSN,程序就可以链接数据库了。timesten 的数据库连接驱动是com.timesten .jdbc .TimesTenDriver,其他和我们使用jdbc 链接数据库一样。

iii. 创建一个connection Url对timesten 数据库
格式如下:jdbc :timesten :{direct | client}:dsn=DSNname;[DSNattributes;]
如:jdbc :timesten :direct:dsn=demo
可以在后面加参数  如:jdbc :timesten :direct:dsn=demo;LockLevel=1

iv. 链接数据源
定义了Connetion URL 可以通过DriverManager.getConnection() 或者 TimesTenDataSource.getConnection()方法连接到数据库。
如果要使用数据源:
TimestenDataSource ds = new TimestenDataSource();
ds.setUrl(url);
Connection con = ds.getConnection();

关闭连接使用connection.close()方法

v. 在java程序中调用SQL Statement的方法
□ 使用con.setAutoCommit()方法设置是否自动提交事务。如果不是自动提交你可以调用Connetion.commit()方法手动提交。
□ PraperedStatement
当你准备通过PraperdStatement执行Sql,调用Connetion.commit()方法来释放先前获得锁和?????。当你执行完了一个prapered statment后,调用ParperedStatment.close释放相关资源。

vi. 执行Sql语句
与jdbc 中操作一样。
在执行一个sql时,可以设置执行的超时,你可以在timesten 中通过设置DSN的设置,设置所有链接的执行Sql的超时时间。你也可以在当前连接中调用Statement.setQueryTimeout重新设置执行一个Sql的最长响应时间。在timesten 超时时间必将的是触指其执行的Sql语句超时。设置超时时间的操作只能在非事务性的操作起作用,对于事务而言,当事务执行的时候,timesten 不会管这个超时时间。
注意:在LockWait值和SqlQueryTimeout在timesten 中被同时设定时,值小的值会被timesten 采用。

vii. 抓取多条数据
你可以制定你要抓取的数据的数量:
□ 调用Statement.setFitchSize()和ResultSet.setFitchSize()方法,这是标准jdbc 调用。但是一次设置只在一个statment中有用。
□ 你可以调用TimestenConnection.setFitchCount()方法或者使用ttIsql prefetchcount命令。通过这种方式可以设置一个connetion的所有statment的抓取数量。注意:你只能在direct- linked模式下使用TimestenConnection的setFitchCount方法才有作用。当你将setFItchCount(int count)中的count设为零时,timeten将使用默认值,这个默认值依赖于你对数据库设置的Isolation的级别。在read commited 下,这个值为5,在serializeable模式下这个值为128.

viii. 通过batch同时执行多条语句
与jdbc 一致

ix. 结果集ResultSet
□ TimesTen 不支持在一个statment中打开多个ResultSet,一个statment不能返回多个ResultSet。
□ TimesTen 不支持持有游标。你不能指定长期持有一个ResultSet及时在Commit后没有关闭ResultSet。
□ ResultSet对象不能制定ResultSet.CONCUR_UPDATABLE和ResultSet.TYPE_SCROLL_SENSITIVE属性
□ 在你使用完ResultSet后马上关闭它。
□ ResultSet的getString方法是个高昂消耗的方法,尽量少使用它。
JDBC ignores the setting for the ConnectionCharacterSet attribute. It
returns data in UTF-16 encoding.

x. 在timesten 中使用存储过程
xi. 处理多线程
当你使用direct-linked模式连接数据库,timesten 使用一个 共享栈在你程序中。在多线程环境下,避免给线程重复分配栈是非常重要的。这个栈空间的消耗取决于Sql的执行。在32位机上该栈空间最小是16kb,64 位机上在34kb到72kb之间。给每个线程分配的栈空间依赖于操作系统。注意:在多线程环境下,一个线程发出的对同一数据的请求在多个连接器上可能会造 成死锁。timesten 解决这种死锁的方法是使用lock timeouts。

xii. 回滚失败的事务
使用Connection.rollback()方法回滚失败的事务。

调优你的程序:(以下大部分建议对oracle数据库也应该适用)
i.    关闭autocommit模式
     XACT_COMMITS中的SYS.MONITOR表记录了事务提交的次数。大量的无意义的事物提交对系统的效率会有较大的影响

ii.   选择一个合适的超时时间

iii.   减少链接数量
   Data store contention can substantially impede application performance.(大量存储连接会大大影响系统的效率)
□    选择适当的锁级别
□    分布存储你的表或者数据
  在SYS.MONITOR表中LOCK_GRANTS_IMMED,LOCK_GRANTS_WAIT和LOCK_GRANTS_CONT记录当前的锁信息。

iv.   选择最好的锁方法
  timesten 支持data-level locking、table-level locking和row-level locking

v.   使用恰当的锁级别
如果访问连接非常少(很少有事务同时产生的时候),使用表锁定会得到非常好的效率和很少发生死锁的情况。表锁定也非常适用于几乎全表的数据update的时候。Date-level locking 一般在系统初始化时使用。

vi. 选择恰当的隔离级别
当使用row-level locking时,程序事务可以是serializeable 和 Read_committed级别,默认是Read_committed级别。
当事务运行在serializeable的隔离级别时,timesten 将在整个事务过程中持有所有的锁。   //todo: 验证这两种方式。
□      任何的对于row锁的更新都在commit时写入。                                                   
□      该row在事务commit后才能读。
当事务运行在Read_committed级别时,timesteen只在整个过程中持有更新锁。 
SYS.MONITOR表中的LOCK_TIMEOUT和DEADSLOCK记录着锁消息。

vii. 选择恰当的日志配置
SYS.MONITOR表中的LOG_FORCES配置了日志写入硬盘的时间间隔。你可以使用LogDir参数在创建链接的时候,自己指定日志的输出目的地。

viii. 使用prepared statement

ix. 避免不必要的prepared选项
应为预编译Sql语句是一个较昂贵的操作,所以你的程序应尽量将调用Connection.PraperedStatement降到最小。尽量将多的操作 放在同一个事务里多次调用在一个connction中,PraperedStatment在一个conntion关闭后失效。

x. 使用batch一次执行多条语句
当有多条Sql执行时,使用Statment和PraperedStatment的execute的batch方法,可以提高程序的效率。

xi. 大批量的抓取数据、
避免获取当量数据时,其中某些数据有锁。

xii. 适当的事务大小
每一个事务提交时timesten 会自动的产生日志,并自动触发写入日志到硬盘。高效的系统应当避免不必要的磁盘写入。如果你的磁盘io使用率过高,可以通过两种方式在事务提交的时候避免写入。
□  调整事务的大小
□ 调整当事务提交时是否写入属性
长事务的执行只有很少的磁盘写入,当时要控制多个长事务同时发生。如果整个程序只有一个链接操作数据库,长事务确实可以大大提高程序的性能。但长事务同时有很多缺陷,比如长事务的回滚。
如果有多个连接,你需要抉择io的延迟还是锁的延迟,最好保持他们自然的长度。这取决于他们的持久性和原子性。

xiii. 恰当的事务提交
Timesten 会默认将每一次事务提交的结果写入硬盘,以便在系统出现问题的时候不置数据丢失。程序可以避免对非持久性的提交的对磁盘的写入操作。
SYS.MONITOR表中的XACT_D_COMMITS记录着持久性提交的数量。事务可以定义成持久的可以定义延迟的在链接的底层,程序可以调用
ttDurableCommit方式强制持久提交。

xiv. 保守的使用ResultSet.getString方法
因为Java中String是不可以改变的,ResultSet.getString方法在每次调用的时候重新分配空间。在JDBC 中这是个昂贵的调用。你可以使用原始数据类型,如byte或者Integer,除非必须使用String。使用这些原始类型是速度是非常快的。

xv. 避免类型转换

xvi. 避免事务回滚
从性能的角度出发这是我们不愿看到的:一个事务的回滚不仅回滚本身带了了性能上的开销,而且也同时代表的事务本身的消耗的浪费。

xvii. 避免频繁的checkpoints
有时候我们需要调用ttCkpt程序来检查日志文件是否已经填满了整个硬盘,这个操作对系统性能有较大影响。但ttCkpt是一个非阻塞操作,比起ttCkptBlocking的阻塞操作来说要好的多。

对jdbc 接口的支持:
        
   timesten 的Connetion等类节本实现了对java.sql和javax.sql下面标准接口的实现

对jdbc 接口的扩展:
           
              对jdbc 的扩展主要是TimesTenConnection和TimesTenVendorCode  (具体信息参看文档)

Times ten内存数据库的配置相关推荐

  1. oracle times ten 学习笔记

    1. times ten本质上是关系型数据库. 2. 性能:12个cpu情况:读300万/s,写50万/s. 3. 可靠性:通过主备机的实时备份保证单点故障,也即应用程序的请求消息在主机times t ...

  2. 如何让NoSQL内存数据库适合企业级应用

    如何让NoSQL内存数据库适合企业级应用 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 英文原文:How to Make Your In-memory ...

  3. hql分页获取数据总数_最简洁的分页插件PageHelper

    最简洁的分页插件PageHelper 简介 大部分后台管理项目,用的最多的展现方式是列表显示,所以我把列表查询中的分页插件拿出来写一下,方便以后写代码的时候直接复制粘贴.在我们最熟悉的springbo ...

  4. 【踩坑记录】—— 越南语ipa包安装失败

    场景 由于fb.谷歌登录要展示 越南语的包名,但product name改为最终要展示的包名之后,调试阶段运行正常,打出来的ipa包 装不了. 解决方案 在xcode工程中有两个地方需要设置 1.in ...

  5. DAMA数据管理知识体系指南-读书笔记6

    第六章 数据存储和操作 一.引言 定义:数据存储与操作包括对存储数据的设计.实施和支持,最大化实现数据资源的价值,贯穿于数据创建/获取到处置的整个生命周期. 2个活动: 数据库操作支持:主要关注与数据 ...

  6. Spring Boot整合H2内存数据库配置及常见问题处理

    文章目录 H2 数据库简介 内存数据库配置与控制台连接 在内存中创建表以及插入数据 SpringBoot整合H2内存数据查询 常见问题及解决 问题1: Database "mem:XXX&q ...

  7. springboot配置内存数据库H2

    业务背景:因soa系统要供外网访问,处于安全考虑用springboot做了个前置模块,用来转发外网调用的请求和soa返回的应答.其中外网的请求接口地址在DB2数据库中对应专门的一张表来维护,后续SOA ...

  8. SWOOLE高性能内存数据库的使用和配置教程

    使用环境:thinkphp6.* + think-swoolev4.0 说明 由于 PHP 语言不支持多线程,因此 Swoole 使用多进程模式,在多进程模式下存在进程内存隔离,在工作进程内修改 gl ...

  9. 二、Java内存数据库实践之深入浅出Redis - Redis安装与配置

    在开始本篇之前,可先了解上一篇redis的基本知识(一.Java内存数据库实践之深入浅出Redis - Redis介绍) http://josh-persistence.iteye.com/blog/ ...

最新文章

  1. 手摸手教你数据可视化!(附实例讲解)
  2. WPF:Animation动画--AnimationTiming动画时机
  3. Facebook全球宕机近7小时,传有15亿用户数据泄漏,市值蒸发千亿
  4. 从 SPIR-V 到 ISPC:将 GPU 计算转化为 CPU 计算
  5. 【十三单元】 软件安装 yum源配置
  6. 深度学习之循环神经网络(8)长短时记忆网络(LSTM)
  7. 矩阵学习摘记,欢迎指正
  8. 开箱一个docker
  9. windows docker常用命令
  10. C语言求两个数的最大公约数
  11. 并查集练习--hdu1232poj1611poj2524
  12. 网络空间搜索引擎全方位评测
  13. Win10安装乌班图18双系统
  14. sql注入检测工具 mysql_Java自动化SQL注入测试工具—jSQL Injection v0.5
  15. 简历关于计算机办公软件怎么写,简历中怎么写办公软件
  16. Android 隐藏APP图标
  17. 3G爱立信告警信息提取
  18. python链接sql报错_python3.7连接sqlserver数据库失败报错20002, DB-Lib error message 20002
  19. android app 马甲包,教你一招APP如何快速定制马甲包
  20. Opencv:图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数

热门文章

  1. centos命令行安装matlab2016b
  2. 由于找不到opencv_world310d.dll,无法继续执行代码。重新安装程序可能会解决此问题。
  3. 云原生应用的12要素
  4. 【清华大学课程】曼昆-经济学原理笔记(全集)
  5. 【项目管理一点通】(46) 项目验收
  6. Python 实现macOS Catalina 动态壁纸定时设置
  7. 实践API钩子拦截DLL库调用
  8. 什么是分账?企业为什么需要分账?
  9. DAS、NAS和SAN,IPSAN的基本了解
  10. AD9的PCB技巧——批量修改封装