rocksdb-ruby 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +11 -5
- data/ext/rocksdb/rocksdb_rb.cc +104 -20
- data/lib/rocksdb/ruby/version.rb +1 -1
- data/spec/db_spec.rb +35 -10
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc1e5a783225ab8620f3f704c1bc1a26bf2553e1
|
4
|
+
data.tar.gz: 160e91cf18f55e4b9e381793433ad8d7ad105133
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13df5b7e0bed1234d6a0a7f603ff02b9f2a971137ffb2d21f4b440571668de43f6615301722a32a0153d1c8241147f204e561423676e965e3e5c165edb25b966
|
7
|
+
data.tar.gz: c5b5fb9d7376f5e05c3f45a0c2e401b0f953a5169fb555528d21ade062329cfaca1ac702e0a4c9bd49adf9254d9dc3de5c8cd68fc28d8d24a2dd3b3f4d5d8a28
|
data/README.md
CHANGED
@@ -28,11 +28,17 @@ Or install it yourself as:
|
|
28
28
|
|
29
29
|
key = "test"
|
30
30
|
value = "1"
|
31
|
-
|
32
|
-
|
33
|
-
new_value =
|
34
|
-
|
35
|
-
|
31
|
+
rocksdb = RocksDB::DB.new "/tmp/file"
|
32
|
+
rocksdb.put(key, value)
|
33
|
+
new_value = rocksdb.get(key)
|
34
|
+
rocksdb.delete(key)
|
35
|
+
|
36
|
+
batch = RocksDB::Batch.new
|
37
|
+
batch.delete("test:batch1")
|
38
|
+
batch.put("test:batch2", "b")
|
39
|
+
rocksdb.write(batch)
|
40
|
+
|
41
|
+
rocksdb.close
|
36
42
|
|
37
43
|
|
38
44
|
## Contributing
|
data/ext/rocksdb/rocksdb_rb.cc
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#include "rocksdb/db.h"
|
2
|
+
#include "rocksdb/write_batch.h"
|
2
3
|
#include <iostream>
|
3
4
|
|
4
5
|
extern "C" {
|
@@ -8,28 +9,46 @@ extern "C" {
|
|
8
9
|
|
9
10
|
typedef VALUE (*METHOD)(...);
|
10
11
|
|
11
|
-
VALUE
|
12
|
-
VALUE
|
13
|
-
VALUE
|
14
|
-
VALUE
|
15
|
-
VALUE
|
16
|
-
|
12
|
+
VALUE rocksdb_db_init(int argc, VALUE* argv, VALUE self);
|
13
|
+
VALUE rocksdb_db_put(VALUE self, VALUE v_key, VALUE v_value);
|
14
|
+
VALUE rocksdb_db_write(VALUE self, VALUE v_write);
|
15
|
+
VALUE rocksdb_db_get(VALUE self, VALUE v_key);
|
16
|
+
VALUE rocksdb_db_multi_get(VALUE self, VALUE v_array);
|
17
|
+
VALUE rocksdb_db_delete(VALUE self, VALUE v_key);
|
18
|
+
VALUE rocksdb_db_close();
|
19
|
+
|
20
|
+
VALUE rocksdb_write_batch_init();
|
21
|
+
VALUE batch_alloc(VALUE klass);
|
22
|
+
VALUE rocksdb_write_batch_put(VALUE self, VALUE v_key, VALUE v_value);
|
23
|
+
VALUE rocksdb_write_batch_delete(VALUE self, VALUE v_key);
|
17
24
|
|
18
25
|
rocksdb::DB* db;
|
19
26
|
|
20
27
|
void Init_RocksDB(){
|
21
28
|
|
22
29
|
VALUE cRocksdb;
|
30
|
+
VALUE cRocksdb_db;
|
31
|
+
VALUE cRocksdb_write_batch;
|
23
32
|
|
24
33
|
cRocksdb = rb_define_class("RocksDB", rb_cObject);
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
rb_define_method(
|
29
|
-
rb_define_method(
|
34
|
+
cRocksdb_db = rb_define_class_under(cRocksdb, "DB", rb_cObject);
|
35
|
+
|
36
|
+
rb_define_private_method(cRocksdb_db, "initialize", (METHOD)rocksdb_db_init, -1);
|
37
|
+
rb_define_method(cRocksdb_db, "put", (METHOD)rocksdb_db_put, 2);
|
38
|
+
rb_define_method(cRocksdb_db, "write", (METHOD)rocksdb_db_write, 1);
|
39
|
+
rb_define_method(cRocksdb_db, "get", (METHOD)rocksdb_db_get, 1);
|
40
|
+
rb_define_method(cRocksdb_db, "multi_get", (METHOD)rocksdb_db_multi_get, 1);
|
41
|
+
rb_define_method(cRocksdb_db, "delete", (METHOD)rocksdb_db_delete, 1);
|
42
|
+
rb_define_method(cRocksdb_db, "close", (METHOD)rocksdb_db_close, 0);
|
43
|
+
|
44
|
+
cRocksdb_write_batch = rb_define_class_under(cRocksdb, "Batch", rb_cObject);
|
45
|
+
rb_define_alloc_func(cRocksdb_write_batch, batch_alloc);
|
46
|
+
rb_define_private_method(cRocksdb_write_batch, "initialize", (METHOD)rocksdb_write_batch_init, 0);
|
47
|
+
rb_define_method(cRocksdb_write_batch, "put", (METHOD)rocksdb_write_batch_put, 2);
|
48
|
+
rb_define_method(cRocksdb_write_batch, "delete", (METHOD)rocksdb_write_batch_delete, 1);
|
30
49
|
}
|
31
|
-
|
32
|
-
VALUE
|
50
|
+
|
51
|
+
VALUE rocksdb_db_init(int argc, VALUE* argv, VALUE self) {
|
33
52
|
VALUE v_db_file_name;
|
34
53
|
|
35
54
|
rb_scan_args(argc, argv, "01", &v_db_file_name);
|
@@ -43,7 +62,7 @@ extern "C" {
|
|
43
62
|
return status.ok() ? Qtrue : Qfalse;
|
44
63
|
}
|
45
64
|
|
46
|
-
VALUE
|
65
|
+
VALUE rocksdb_db_put(VALUE self, VALUE v_key, VALUE v_value) {
|
47
66
|
Check_Type(v_key, T_STRING);
|
48
67
|
Check_Type(v_value, T_STRING);
|
49
68
|
|
@@ -55,7 +74,15 @@ extern "C" {
|
|
55
74
|
return status.ok() ? Qtrue : Qfalse;
|
56
75
|
}
|
57
76
|
|
58
|
-
VALUE
|
77
|
+
VALUE rocksdb_db_write(VALUE self, VALUE v_write){
|
78
|
+
rocksdb::WriteBatch *batch;
|
79
|
+
Data_Get_Struct(v_write, rocksdb::WriteBatch, batch);
|
80
|
+
|
81
|
+
rocksdb::Status status = db->Write(rocksdb::WriteOptions(), batch);
|
82
|
+
return status.ok() ? Qtrue : Qfalse;
|
83
|
+
}
|
84
|
+
|
85
|
+
VALUE rocksdb_db_get(VALUE self, VALUE v_key){
|
59
86
|
Check_Type(v_key, T_STRING);
|
60
87
|
|
61
88
|
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
@@ -65,17 +92,74 @@ extern "C" {
|
|
65
92
|
return rb_str_new(value.data(), value.size());
|
66
93
|
}
|
67
94
|
|
68
|
-
VALUE rocksdb_delete(VALUE self, VALUE v_key){
|
69
|
-
Check_Type(v_key, T_STRING);
|
70
95
|
|
96
|
+
VALUE rocksdb_db_multi_get(VALUE self, VALUE v_array){
|
97
|
+
Check_Type(v_array, T_ARRAY);
|
98
|
+
|
99
|
+
long i;
|
100
|
+
VALUE *tmp = RARRAY_PTR(v_array);
|
101
|
+
long length = RARRAY_LEN(v_array);
|
102
|
+
std::vector<std::string> values(length);
|
103
|
+
std::vector<rocksdb::Slice> keys(length);
|
104
|
+
std::vector<rocksdb::Status> status;
|
105
|
+
|
106
|
+
for(i=0; i < length; i++){
|
107
|
+
keys[i] = rocksdb::Slice((char*)RSTRING_PTR(*tmp));
|
108
|
+
tmp++;
|
109
|
+
}
|
110
|
+
|
111
|
+
status = db->MultiGet(rocksdb::ReadOptions(),keys,&values);
|
112
|
+
for(i=0; i < length; i++){
|
113
|
+
RARRAY_PTR(v_array)[i] = rb_str_new(values[i].data(), values[i].size());
|
114
|
+
}
|
115
|
+
return v_array;
|
116
|
+
}
|
117
|
+
|
118
|
+
VALUE rocksdb_db_delete(VALUE self, VALUE v_key){
|
119
|
+
Check_Type(v_key, T_STRING);
|
120
|
+
|
71
121
|
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
72
122
|
rocksdb::Status status = db->Delete(rocksdb::WriteOptions(), key);
|
73
|
-
|
123
|
+
|
74
124
|
return status.ok() ? Qtrue : Qfalse;
|
75
125
|
}
|
76
|
-
|
77
|
-
VALUE
|
126
|
+
|
127
|
+
VALUE rocksdb_db_close(){
|
78
128
|
delete db;
|
79
129
|
return Qnil;
|
80
130
|
}
|
131
|
+
|
132
|
+
VALUE batch_alloc(VALUE klass){
|
133
|
+
rocksdb::WriteBatch *batch = ALLOC(rocksdb::WriteBatch);
|
134
|
+
batch = new rocksdb::WriteBatch;
|
135
|
+
return Data_Wrap_Struct(klass, 0, -1, batch);
|
136
|
+
}
|
137
|
+
|
138
|
+
VALUE rocksdb_write_batch_init(){
|
139
|
+
return Qtrue;
|
140
|
+
}
|
141
|
+
VALUE rocksdb_write_batch_put(VALUE self, VALUE v_key, VALUE v_value){
|
142
|
+
Check_Type(v_key, T_STRING);
|
143
|
+
Check_Type(v_value, T_STRING);
|
144
|
+
|
145
|
+
rocksdb::WriteBatch *batch;
|
146
|
+
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
147
|
+
std::string value = std::string((char*)RSTRING_PTR(v_value));
|
148
|
+
|
149
|
+
Data_Get_Struct(self, rocksdb::WriteBatch, batch);
|
150
|
+
batch->Put(key, value);
|
151
|
+
return Qnil;
|
152
|
+
}
|
153
|
+
VALUE rocksdb_write_batch_delete(VALUE self, VALUE v_key){
|
154
|
+
Check_Type(v_key, T_STRING);
|
155
|
+
|
156
|
+
rocksdb::WriteBatch *batch;
|
157
|
+
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
158
|
+
|
159
|
+
Data_Get_Struct(self, rocksdb::WriteBatch, batch);
|
160
|
+
batch->Delete(key);
|
161
|
+
|
162
|
+
return Qnil;
|
163
|
+
}
|
164
|
+
|
81
165
|
}
|
data/lib/rocksdb/ruby/version.rb
CHANGED
data/spec/db_spec.rb
CHANGED
@@ -3,29 +3,54 @@ require "RocksDB"
|
|
3
3
|
|
4
4
|
describe RocksDB do
|
5
5
|
before do
|
6
|
-
@
|
6
|
+
@rocksdb = RocksDB::DB.new "/tmp/file"
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'should get data' do
|
10
|
-
@
|
11
|
-
@
|
10
|
+
@rocksdb.put("test:read", "1")
|
11
|
+
@rocksdb.get("test:read").should eq "1"
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'should put data' do
|
15
|
-
@
|
16
|
-
@
|
15
|
+
@rocksdb.put("test:put", "2").should be_true
|
16
|
+
@rocksdb.get("test:put").should eq "2"
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should delete data' do
|
20
|
-
@
|
21
|
-
@
|
20
|
+
@rocksdb.put("test:delete", "3")
|
21
|
+
@rocksdb.get("test:delete").should eq "3"
|
22
22
|
|
23
|
-
@
|
24
|
-
@
|
23
|
+
@rocksdb.delete("test:delete").should be_true
|
24
|
+
@rocksdb.get("test:delete").should be_empty
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should get multi data' do
|
28
|
+
@rocksdb.put("test:multi1", "a")
|
29
|
+
@rocksdb.put("test:multi2", "b")
|
30
|
+
@rocksdb.put("test:multi3", "c")
|
31
|
+
|
32
|
+
@rocksdb.multi_get(["test:multi1", "test:multi2", "test:multi3"]).should eq ["a", "b", "c"]
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should put data atomic update' do
|
36
|
+
@rocksdb.put("test:batch1", "a")
|
37
|
+
@rocksdb.delete("test:batch2")
|
38
|
+
|
39
|
+
@rocksdb.get("test:batch1").should eq "a"
|
40
|
+
@rocksdb.get("test:batch").should eq ""
|
41
|
+
|
42
|
+
batch = RocksDB::Batch.new
|
43
|
+
batch.delete("test:batch1")
|
44
|
+
batch.put("test:batch2", "b")
|
45
|
+
@rocksdb.write(batch)
|
46
|
+
|
47
|
+
@rocksdb.get("test:batch1").should eq ""
|
48
|
+
@rocksdb.get("test:batch2").should eq "b"
|
25
49
|
end
|
26
50
|
|
27
51
|
after do
|
28
|
-
@
|
52
|
+
@rocksdb.close
|
29
53
|
end
|
30
54
|
|
31
55
|
end
|
56
|
+
|