Documentation

Introduction #

Distkv is a type-oriented database system. There are several concepts in Distkv that looks like the basic collections. We have 6 concepts string, list, set, dict, sortedlist and table yet.

In this section, you will learn the grammer of these basic concepts in Distkv, and will learn how to use these concepts as examples as well.

1. String Concept #

Put a string value into Distkv store.

str.put key value

example:

$ dkv-cli > str.put k1 v1
$ dkv-cli > ok

Get a string value from Distkv store.

str.get key

example:

dkv-cli > str.get k1
dkv-cli > v1

Drop a string value from Distkv store.

str.drop key

example:

dkv-cli > str.drop k1
dkv-cli > ok

dkv-cli > str.get k1
dkv-cli > errorCode: A100;
 Detail: The key k1 is not found in the store.

2. List Concept #

Put a list into Distkv store.

list.put key value1 [value2 [value3 [...]]]

example:

dkv-cli > list.put k1 v1 v2 v3
dkv-cli > ok

Get a list from Distkv store.

list.get key

example:

dkv-cli > list.get k1
dkv-cli > [v1, v2, v3]

Get a range of items of the list from Distkv store.

# Note that it's excluding the `end_index`.
list.get key from_index end_index

example:

dkv-cli > list.get k1 0 2
dkv-cli > [v1, v2]

Get one item of the list from Distkv store.

list.get key index

example:

dkv-cli > list.get k1 1
dkv-cli > v1

Put items into the front of the list.

list.lput key value1 [value2 [value3 [...]]]

example:

dkv-cli > list.lput "k1" "v4" "v5" "v6"
dkv-cli > ok

Put items into the back of the list.

list.rput key value1 [value2 [value3 [...]]]

example:

dkv-cli > list.rput "k1" "v7"
dkv-cli > ok

Remove item from the list with the given index.

list.ldel key index

example:

dkv-cli > list.ldel "k1" 2
dkv-cli > ok

Remove item from the back of the list with the given back index.

list.rdel key back_index

If the list is [1, 2, 3] and the given number is 0, item 3 will be removed.

example:

dkv-cli > list.rdel "k1" 2
dkv-cli > ok

Get the list from Distkv store.

list.get key

example:

dkv-cli > list.get "k1"
dkv-cli > ["v6", "v1", "v2"]

3. Set concept #

dkv-cli > set.put "k1" "v1" "v2" "v3"
dkv-cli > ok

dkv-cli > set.get "k1"
dkv-cli > {"v1", "v2", "v3"}

dkv-cli > set.del "k1" "v1"
dkv-cli > ok

dkv-cli > set.get "k1"
dkv-cli > {"v2", "v3"}

dkv-cli > set.exists "k1" "v2"
dkv-cli > true

dkv-cli > set.exists "k1" "v4"
dkv-cli > false

dkv-cli > set.drop "k1"
dkv-cli > ok

4. Dict concept #

dkv-cli > dict.put "dict1" "k1" "v1" "k2" "v2"
dkv-cli > ok

dkv-cli > dict.get "dict1"
dkv-cli > { "k1" : "v1", "k2" : "v2"}

dkv-cli > dict.get "dict1" "k1"
dkv-cli > "v1"

dkv-cli > dict.get "dict1" "k1"
dkv-cli > "v1"

dkv-cli > dict.del "dict1" "k1"
dkv-cli > ok

dkv-cli > dict.pop "dict1" "k2"
dkv-cli > "v2"

dkv-cli > dict.get "dict1"
dkv-cli > []

dkv-cli > dict.drop "dict1"
dkv-cli > ok

5. SortedList Concept #

dkv-cli > slist.put "slist1" "m12" 12 "m2" 2 "m5" 5
dkv-cli > ok

dkv-cli > slist.top "slist1" 2
dkv-cli > [("m12", 12), ("m5", 5)]

dkv-cli > slist.incrScore "slist1" "m5" 10
dkv-cli > ok

dkv-cli > slist.putMember "slist1" "m9" 13
dkv-cli > ok

dkv-cli > slist.removeMember "slist1" "m9"
dkv-cli > ok

dkv-cli > slist.top "slist1" 2
dkv-cli > [("m5", 15), ("m12", 12)]

dkv-cli > slist.getMember "slist1" "m12"
dkv-cli > ("m12", 12), 2nd

dkv-cli > slist.drop "slist1"
dkv-cli > ok

6. Table concept #

  1. Define your data structure in a schema file named mytables.sc
table TaskTable {
  [p]task_id: string;
  [i]driver_id: string;
  task_name: string;
  return_num: int;
  arguments: [string];
}
table DriverTable {
 [p]driver_id: string;
 driver_name: string;
 actor_num: int;
};
  1. Start an distkv server and execute this command to create table:
> dkv-cli -p 12344 # connect to distkv server
> create TaskTable, DriverTable from mytables.sc
  1. Add data to the table:
> TaskTable.add "00001", "22222", "my_task", 3, ["1", "2"]
< ok
> TaskTable.add "00002", "99999", "my_task", 3, ["1", "2"]
< ok
> TaskTable.add "00003", "22222", "my_task", 3, ["1", "2"]
< ok
> DriverTable.add "22222", "my_driver", 10
< ok
  1. Query all tasks by driver id:
> TaskTable.query (*) when driver_id == "22222"
<
< task_id      driver_id     task_name      num_return      arguments
< "00001"      "22222"       "my_task"      3               ["1", "2"]
< "00003"      "22222"       "my_task"      3               ["1", "2"]
< 2 records