WiredTiger 编程入门(以Java为例)

前文

最近由于一些业务需求需要使用Java调用WiredTiger的API,故开一贴来记录一下WiredTiger的一些设计以及其Java API的应用。由于其Java API是通过SWIG生成的, 所以也相当于是学习C风格的API,真可谓是一举两得。

基本概念介绍

WiredTiger程序通常通过以下类来访问和管理程序

  • Connection表示与数据库的连接。大部分应用程序只会为每个进程打开一个与数据库的连接。Connection中的所有方法都是线程安全的。
  • Session表示数据库操作执行所在的上下文(Context),在特定的connection上被打开,并且应用程序对于每个线程都必须得开启一个对应的session来访问数据库。
  • Cursor表示数据集合上的游标,在session的上下文中被打开(可能有关联事务),并且可以查询或者更新数据。大多数情况下,cursor用于访问表里的记录。除此之外,cursor还可以用于表的子集(如单列或者多列的投影),作为统计信息、配置数据或特定于应用程序的数据源的接口。

在WiredTiger中,操作是通过字符串配置的,这使得API中的方法相对较少,并且API的调用很相似,无论是在C/C++或是Java、Python之中。

默认情况下,WiredTiger 作为传统的key-value数据库,其中key和value都是原始字节数组(raw byte values)。同时,WiredTiger还支持Schema Layer,因此类型可以是任意类型组合的列形成的复合键值。

WiredTiger的基本操作

访问数据库,首先需要打开一个连接,并且为访问数据库的线程创建一个session handle

        Connection conn;
        Session s;
        Cursor c;
        try {
            conn = wiredtiger.open("WT_HOME", "create");
            s = conn.open_session(null);
        } catch (WiredTigerException wte) {
            System.err.println("WiredTigerException: " + wte);
            return;
        }

配置字符串中的create表明当所指示的地址(即WT_HOME)数据库不存在时,将会创建一个新的WiredTiger数据库。同时,也展示了简单的异常处理机制。

获取数据库的连接后,创建一张数据表table:t,并且指定键值的数据类型。 其中,S表示字符串,u表示字节数组byte[] 。更加具体的内容会在后面介绍。

        s.create("table:t", "key_format=S,value_format=u");

创建好数据表后,可以通过游标(cursor)访问数据。之后,我们希望像表格中插入新的一行,因此通过游标的函数进行设置。

        c = s.open_cursor("table:t", null, null);
        try {
            c.putKeyString("foo");
            c.putValueByteArray("bar".getBytes());
            c.insert();
        } catch (WiredTigerPackingException wtpe) {
            System.err.println("WiredTigerPackingException: " + wtpe);
        } catch (WiredTigerException wte) {
            System.err.println("WiredTigerException: " + wte);
        }

之后,我们遍历表格中所有的记录并且打印在输出框中

        try {
            c.reset();
            while (c.next() == 0) {
                System.out.println("Got: " + c.getKeyString());
            }
        } catch (WiredTigerPackingException wtpe) {
            System.err.println("WiredTigerPackingException: " + wtpe);
        } catch (WiredTigerException wte) {
            System.err.println("WiredTigerException: " + wte);
        }

值得注意的是,这返回的key和value都是作为C字符串返回的,因为表格就是如此创建的,因此在应用程序中,不需要做数据提取或者转换。同时,由于游标在插入命令后位置发生了改变,因此我们需要使用c.reset()重置游标。如果没有使用cursor调用上述的insert命令,循环可以简化为:

        while((ret = c.next()) == 0){
            ....
        }

最后,需要显示关闭与数据库的链接

       try {
            conn.close(null);
        } catch (WiredTigerException wte) {
            System.err.println("WiredTigerException: " + wte);
        }

以上便是使用Java操纵WiredTiger API的基本流程。

WiredTiger中的配置字符串

WiredTiger中的方法采用配置字符串(configuration strings)来提供可选参数并配置非标准行为。这些字符串是简单的逗号分隔的<key>=<value>对列表,并且都具有相同的格式:

    [key['='value
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值