BDB Java Sample Program Backing enterprise and embedded Java applications with BDB Copyright © 2014 Oracle and/or its affiliates.

Download Report

Transcript BDB Java Sample Program Backing enterprise and embedded Java applications with BDB Copyright © 2014 Oracle and/or its affiliates.

BDB Java Sample Program

Backing enterprise and embedded Java applications with BDB

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB

Berkeley DB

• A high-performance key-value database – Designed for high-throughput applications requiring in-process, bullet-proof management of mission-critical data – Scale gracefully from managing a few bytes to terabytes of data • Full ACID transaction support – Concurrent transactional operations with multiple isolation levels – Full transactional recovery support • Cursor and secondary index support – Fast and flexible data access • Cross platform support Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 2

Berkeley DB for Java

• Why Java?

– Cross platform, write once run everywhere – Scale gracefully from tiny embedded devices to clustered enterprise applications • How?

– Base key-value API – Direct persistence layer (DPL) API – JDBC API Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 3

Base key-value API

• Lower level API – Full control over persisted data format – Resemble closely to the C API – Work with Java 4+ – More verbose • Handles – Environment – Database – Cursor Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 4

Base key-value API - Example

• Opening the environment and database EnvironmentConfig envConfig = new EnvironmentConfig(); envConfig.setInitializeCache(true); envConfig.setInitializeLocking(true); envConfig.setInitializeLogging(true); envConfig.setTransactional(true); Environment env = new Environment(“envHome”, envConfig); DatabaseConfig dbConfig = new DatabaseConfig(); dbConfig.setTransactional(true); dbConfig.setType(DatabaseType.BTREE); Database db = env.openDatabase(null, “myDatabase.db”, null, dbConfig); Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 5

Base key-value API – Example cont.

• Writing and getting values with binding DatabaseEntry key = new DatabaseEntry(); DatabaseEntry value = new DatabaseEntry(); TupleBinding keyBinding = TupleBinding.getPrimitiveBinding(Long.class); TupleBinding valueBinding = TupleBinding.getPrimitiveBinding(String.class); keyBinding.objectToEntry(1L, key); valueBinding.objectToEntry(“value”, value); db.put(null, key, value); // get the same value back DatabaseEntry dbValue = new DatabaseEntry(); db.get(null, key, dbValue, LockMode.DEFAULT); String strValue = valueBinding.entryToObject(dbValue); Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 6

Base key-value API – Example cont.

• Using cursors DatabaseEntry key = new DatabaseEntry(); DatabaseEntry value = new DatabaseEntry(); TupleBinding keyBinding = TupleBinding.getPrimitiveBinding(Long.class); TupleBinding valueBinding = TupleBinding.getPrimitiveBinding(String.class); keyBinding.objectToEntry(1L, key); Cursor cur = db.openCursor(null, null); OperationStatus status = cur.getSearchKey(key, value, LockMode.DEFAULT); if (status == OperationStatus.SUCCESS) String strValue = valueBinding.entryToObject(dbValue); Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 7

Direct persistence layer API

• Higher level API – Work with objects instead of key-value pairs – Use annotation, less cluttered code – Work better with relatively static schema – Require Java 5+ • Core classes – EntityStore – PrimaryIndex/SecondaryIndex – EntityCursor Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 8

Direct persistence layer API - Example

• Opening the environment and entity store EnvironmentConfig envConfig = new EnvironmentConfig(); envConfig.setInitializeCache(true); envConfig.setInitializeLocking(true); envConfig.setInitializeLogging(true); envConfig.setTransactional(true); Environment env = new Environment(“envHome”, envConfig); StoreConfig storeConfig = new StoreConfig(); storeConfig.setAllowCreate(true).setTransactional(true); EntityStore store = new EntityStore(env, name, storeConfig); Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 9

Direct persistence layer API – Example cont.

• Annotate entity classes @Entity public class Ticket { @PrimaryKey private Long ticketId; private String meterId; public Ticket() {} public Ticket(Long id, String mId) { ticketId = id; meterId = mId; } public Long getTicketId() { return ticketId; } } public String getMeterId() { return meterId; } Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 10

Direct persistence layer API – Example cont.

• Writing and getting objects PrimaryIndex index = store.getPrimaryIndex(Long.class, Ticket.class); index.put(new Ticket(1L, “myTicket”)); Ticket ticket = index.get(1L); • Using cursors EntityCursor cursor = index.entities(); for (Ticket t : cursor) String meterId = t.getMeterId(); Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 11

JDBC API

• Use SQLite dialect • Support JDBC 4 • Work with Java 4 - Java 7 • JDBC URL jdbc:sqlite:/ Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 12

The sample program

• The story – Simulates a parking lot with one parking meter • OLTP & OLAP – Ticket transactions (CRUD) follow the OLTP paradigm – Operational analysis (BI/Data mining) follow the OLAP paradigm • Cross platform/IDE support – Linux / Unix / Windows – IntelliJ / Eclipse / JDeveloper Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 13

The sample program – cont.

• Support all three APIs – Base key-value API – DPL API – JDBC API • Cover many features – Transaction – Cursor – Primary and secondary index Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 14

The sample program – Data model

TICKET ( TICKET_ID INTEGER PRIMARY KEY, METER_ID TEXT, ISSUE_TIME INTEGER) TICKET_LOG( LOG_TIME INTEGER PRIMARY KEY, METER_ID TEXT, TICKET_ID INTEGER, ACTION TEXT, CHARGE_FEE INTEGER) SEQUENCE “TICKET_ID_SEQ” INDEX METER_IDX ON TICKET_LOG(METER_ID, LOG_TIME) Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 15

The sample program – Data access layer

• DbManager – Manages an environment or a JDBC connection – Manages transactions – Creates DAOs • TicketDAO – CRUD operations on Tickets • TicketLogDAO – Append TicketLogs and query TicketLogs given a meterId and a period Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 16

The sample program – Application components

• Meter – Represent a parking meter – Create Tickets and compute parking fees • Reporting – Represent a BI reporting module – Create reports using TicketLog queries • Driver – A demo driver program Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 17

The sample program - Run

• General steps: – Build the following Berkeley DB components on your platform • • • Core SQL API Java API • JDBC API – Import the sample program into your IDE – Configure the project’s build path to include the Java and JDBC jars – Configure ‘java.library.path’ to point to native Berkeley DB libraries in your run configuration Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 18

Resources

• We need to figure out where to put the following and add that here – Code – Word & PPT – 5 videos • Main (PPT + code walk through) • • BDB build 3 IDEs Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Berkeley DB 19