pingcap / tikv-client-lib-java

TiKV Java client library
Apache License 2.0
44 stars 21 forks source link

Ti-Client in Java [Under Construction]

A Java client for TiDB/TiKV. It is supposed to:

How to build

The following command can install dependencies for you.

mvn package

Alternatively, you can use bazel for much faster build. When you try this approach, you should run git submodule update --init --recursive before you build project.

Making a uber jar:

make uber_jar

run Main class:

make run

run test cases:

make test

this project is designed to hook with pd and tikv which you can find in PingCap github page.

When you work with this project, you have to communicate with pd and tikv. There is a script taking care of this. By executing the following commands, pd and tikv can be executed on background.

cd scripts
make pd
make tikv

How to use for now

Since it's not quite complete, a usage sample for now can be given is:

// Init tidb cluster configuration
TiConfiguration conf = TiConfiguration.createDefault("127.0.0.1:2379");
TiSession session = TiSession.create(conf);
Catalog cat = session.getCatalog();
TiDBInfo db = cat.getDatabase("tpch_test");
TiTableInfo table = cat.getTable(db, "customer");
Snapshot snapshot = session.createSnapshot();

// Generate select ranges
ByteString startKey = TableCodec.encodeRowKeyWithHandle(table.getId(), Long.MIN_VALUE);
ByteString endKey = TableCodec.encodeRowKeyWithHandle(table.getId(), Long.MAX_VALUE);
Coprocessor.KeyRange keyRange = Coprocessor.KeyRange.newBuilder().setStart(startKey).setEnd(endKey).build();
List<Coprocessor.KeyRange> ranges = new ArrayList<>();
ranges.add(keyRange);

// Create select request
TiSelectRequest selectRequest = new TiSelectRequest();
selectRequest.addRanges(ranges);
selectRequest.addField(TiColumnRef.create("c_mktsegment", table));
selectRequest.setTableInfo(table);
selectRequest.setStartTs(session.getTimestamp().getVersion());
selectRequest.addWhere(new GreaterEqual(TiConstant.create(5), TiConstant.create(5)));
selectRequest.addGroupByItem(TiByItem.create(TiColumnRef.create("c_mktsegment"), false));
selectRequest.setLimit(10);
selectRequest.bind();

// Fetch data
Iterator<Row> iterator = snapshot.select(selectRequest);
System.out.println("Show result:");
while (iterator.hasNext()) {
  Row rowData = iterator.next();
  for (int i = 0; i < rowData.fieldCount(); i++) {
    System.out.print(rowData.get(i, null) + "\t");
  }
  System.out.println();
}

Result:

Show result:
BUILDING    
AUTOMOBILE  
MACHINERY   
HOUSEHOLD   
FURNITURE   

TODO

Contributions are welcomed. Here is a TODO and you might contact maxiaoyu@pingcap.com if needed.

License

Apache 2.0 license. See the LICENSE file for details.