This document walks you through how to use RawKV’s Scan API.

Java

Scan with limit

Using the Scan API, you can scan key-value pairs from TiKV in a range (from a startKey to an endKey).

startKey is inclusive while endKey is exclusive.

To configure the Scan API to return a limited number of key-value pairs, you can use the limit argument as in the following example code:

1. import java.util.List;
2. import org.tikv.common.TiConfiguration;
3. import org.tikv.common.TiSession;
4. import org.tikv.kvproto.Kvrpcpb;
5. import org.tikv.raw.RawKVClient;
6. import org.tikv.shade.com.google.protobuf.ByteString;

8. TiConfiguration conf = TiConfiguration.createRawDefault("127.0.0.1:2379");
9. TiSession session = TiSession.create(conf);
10. RawKVClient client = session.createRawClient();

12. // prepare data
13. client.put(ByteString.copyFromUtf8("k1"), ByteString.copyFromUtf8("v1"));
14. client.put(ByteString.copyFromUtf8("k2"), ByteString.copyFromUtf8("v2"));
15. client.put(ByteString.copyFromUtf8("k3"), ByteString.copyFromUtf8("v3"));
16. client.put(ByteString.copyFromUtf8("k4"), ByteString.copyFromUtf8("v4"));

18. // scan with limit
19. int limit = 1000;
20. List<Kvrpcpb.KvPair> list = client.scan(ByteString.copyFromUtf8("k1"), ByteString.copyFromUtf8("k5"), limit);
21. for(Kvrpcpb.KvPair pair : list) {
22. System.out.println(pair);
23. }

25. // close
26. client.close();
27. session.close();

Scan all data

The Scan API only returns a limited number of key-value pairs. If you want to fetch all the data in the range from startKey to endKey, refer to the following example code for a simple demo:

1. import java.util.List;
2. import org.tikv.common.TiConfiguration;
3. import org.tikv.common.TiSession;
4. import org.tikv.common.key.Key;
5. import org.tikv.kvproto.Kvrpcpb;
6. import org.tikv.raw.RawKVClient;
7. import org.tikv.shade.com.google.protobuf.ByteString;

9. TiConfiguration conf = TiConfiguration.createRawDefault("127.0.0.1:2379");
10. TiSession session = TiSession.create(conf);
11. RawKVClient client = session.createRawClient();

13. // prepare data
14. String keyPrefix = "p";
15. for(int i = 1; i <= 9; i ++) {
16. for(int j = 1; j <= 9; j ++) {
17. client.put(ByteString.copyFromUtf8(keyPrefix + i + j), ByteString.copyFromUtf8("v" + i + j));
18. }
19. }

21. // scan all data
22. ByteString startKey = ByteString.copyFromUtf8(keyPrefix + "11");
23. ByteString endKey = Key.toRawKey(ByteString.copyFromUtf8(keyPrefix + "99")).next().toByteString();
24. int limit = 4;
25. while(true) {
26. List<Kvrpcpb.KvPair> list = client.scan(startKey, endKey, limit);
27. Key maxKey = Key.MIN;
28. for (Kvrpcpb.KvPair pair : list) {
29. System.out.println(pair);
30. Key currentKey = Key.toRawKey(pair.getKey());
31. if(currentKey.compareTo(maxKey) > 0) {
32. maxKey = currentKey;
33. }
34. }

36. if(list.size() < limit) {
37. break;
38. }
39. startKey = maxKey.next().toByteString();
40. }

To get the example code above, click here.