总览
介绍
DB2JSON可用于DB2 Linux,Unix和Windows 10.5以及用于z / OS V3.1的IBM DB2 Accessories Suite与DB2 for z / OS V10一起使用。 它提供以下功能:
- 用于管理和查询JSON数据的命令行外壳
- 用于应用程序开发的Java™API
- 有线侦听器接受并响应通过网络发送的请求。
图1. DB2 JSON组件
本文介绍了如何使用Java接口来管理和查询DB2 JSON文档存储中的JSON文档。 它还讨论了可用的ACID支持的某些方面以及将事务支持选项与增加吞吐量的选项结合使用的限制。
先决条件
要运行示例应用程序,您必须在系统上至少安装了Linux,UNIX和Windows的IBM DB2 10.5,或者使用IBM DB2 Accessories Suite for z / OS V3.1来启用DB2 for z / OS。 V10作为JSON数据存储区。
如果您已经具有可用于运行示例的启用JSON的DB2数据库,请记下主机名或IP地址和端口号,然后继续Terminology 。 否则,请根据您的数据库平台检查并完成以下步骤。
Linux,UNIX和Windows上的IBM DB2
- 查看环境变量:
- 确保PATH中包含Java运行时环境(最低JRE 1.5),
- 并且CLASSPATH包含db2nosql.jar和JDBC驱动程序(3.66或更高版本的db2jcc.jar或db2jcc4.jar)。
- 创建一个数据库。
- 启用数据库。
以下示例显示了如何创建和启用数据库。
清单1.创建并启用数据库
CREATE DATABASE jsondb automatic storage yes using codeset utf-8
territory US collate using system pagesize 32 k
db2nosql -user bob -hostName bobshost -port 50000 -db jsondb -password mypwd -setup enable
另请参阅本系列的第2部分, 使用命令行界面 。
IBM DB2 z / OS版
应用程序可以在分布式系统平台上使用DB2 JSON API或DB2 JSON WireListener,并使用DB2 Connect JDBC驱动程序将DB2 for z / OS用作JSON数据存储。
此部署方案需要以下组件:
- 带有DB2 JSON和DB2驱动程序组件的DB2 10.5 FP3(或更高版本),用于Linux,Unix和Windows服务器或客户机安装。 安装后,这些组件位于SQLLIB / json中。
- DB2附件套件V3.1。
- 具有必需的APAR的DB2 for z / OS版本10:有关先决条件和DB2 JSON与DB2 for z / OS一起安装的详细信息,请参阅APAR II14727。
使用DB2 for z / OS,启用数据库将由DB2 for z / OS数据库或系统管理员作为一次性安装任务执行。 z / OS不支持通过db2nosql命令行工具启用该功能。 有关使用DB2 z / OS版启用DB2 JSON的详细信息,请参见APAR PM98357。
在分布式系统上对数据库进行分类,并记下用于DB2 JSON客户端的z / OS上的连接信息或DB2数据库的URL。
术语
- JSON存储:充当JSON文档存储的DB2数据库。 在开始使用IBM JSON解决方案来处理JSON文档之前,您需要获取必要的连接和授权信息,以访问作为JSON存储的DB2数据库服务器。
- JSON名称空间: DB2 SQL模式用于完全限定集合,并且在概念上类似于MongoDB数据库。
- JSON集合:集合包含一组文档,并在DB2表中表示。 JSON集合支持灵活的文档架构; 他们不执行结构。
一个简单的Java应用程序样本
从本文的可下载资源部分下载Sample.java。 要在db2cmd窗口中运行此示例程序,请完成以下步骤:
- 设置CLASSPATH:将nosqljson.jar和db2jcc.jar或db2jcc4.jar包含到类路径中。
- 在Windows上:
假设db2jcc.jar位于C:\ Program Files \ IBM \ SQLLIB \ java目录中,而nosqljson.jar位于C:\ Program Files \ IBM \ SQLLIB \ json \ lib目录中,则按如下所示设置CLASSPATH:set CLASSPATH=.;C:\Program Files\IBM\SQLLIB\java\db2jcc.jar; C:\Program Files\IBM\SQLLIB\json\lib\nosqljson.jar
- 在UNIX上:
假设db2jcc.jar位于/ sqllib / java目录中,而nosqljson.jar位于/ sqllib / json / lib目录中,则按如下所示设置CLASSPATH:export CLASSPATH=.:/sqllib/java/db2jcc.jar:/sqllib/json/lib/nosqljson.jar
- 在Windows上:
- 创建一个测试目录,并将示例程序复制到该测试目录中。
- 修改示例程序以适应数据库名称和连接信息。
- 在此测试目录中编译并运行Java示例程序。
- 编译示例程序:
javac Sample.java
- 要运行Java示例程序:
java Sample
- 编译示例程序:
带注释的Java示例程序
此示例程序插入一个文档,并提交查询以再次找到它。 有关完整的示例代码,请参见Sample.java 。
- 获取
DB
对象。
请注意,DB2使用SQL模式作为JSON名称空间来构建完全限定的集合名称。 因此,应该使用连接信息和所需的名称空间(DB2模式)来获取DB
对象。DB db = NoSQLClient.getDB (databaseUrl, user, password, ns);
- 获取收集句柄。
该集合在DB2中表示为一个表。 但是,将不会通过获取集合句柄来创建集合。 相反,如果该集合不存在,则将在插入第一个文档时自动创建该集合。 在此示例中,稍后将使用此隐式方法创建集合。 要显式创建一个集合,请使用方法db.createCollection(name, indexSpec)
。DBCollection col = db.getCollection ("books");
- 插入文件。
尝试插入文档时,如果集合不存在,则会自动创建该集合。 还要注意,如果文档不包含_id字段,则将使用具有生成的二进制标识符的主键来创建集合。 如果随后插入的文档包含_id字段,则该_id字段的数据类型必须与生成的_id的数据类型匹配。BasicDBObject json = new BasicDBObject (); json.append ("author", "Smith"); json.append ("title", "My first book"); System.out.println ("Inserting: " + json); col.insert (json);
- 提交查询。
使用所需的搜索条件构建一个对象,并为该集合调用find方法。 在第一次调用hasNext()时执行查询,结果可通过游标获得。 请注意,查询没有投影列表,因此结果将包括所有属性,包括生成的标识符。DBCursor cursor = col.find (new BasicDBObject ("author", "Smith")); try { while (cursor.hasNext ()) { DBObject obj = cursor.next (); System.out.println ("Retrieved: " + obj); } } finally { cursor.close (); } } }
预期样本输出:
- 插入:
{"author":"Smith","title":"My first book"}
- 检索:
{"_id":"$oid":"51bf710b416e9107ff9bc734"}, "author":"Smith","title":"My first book"}
基本概念
DB2 JSON Java API中的JSON对象
JSON命名空间: DB
对象
获取DB
对象的句柄以访问JSON存储。 DB