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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a4b643c77713d1a10a584eb7521aa6a6471cf49
4
- data.tar.gz: 60ef9caa8b6f4975ddacde6de2bb51feb6c33c12
3
+ metadata.gz: bc1e5a783225ab8620f3f704c1bc1a26bf2553e1
4
+ data.tar.gz: 160e91cf18f55e4b9e381793433ad8d7ad105133
5
5
  SHA512:
6
- metadata.gz: 23282a7b75a4274f1f6b3dee2611cd2dc6296e16a790df4ca52f67db59f509f847d03ec021598629701e22220cf049bbb90ef316f76aa8a8c90c2156ce0b17f5
7
- data.tar.gz: 181cd8ad272e4215494176c8592d6680793372a9199ee895afa89c0ca41364ab4ffe5647b49de649208e1d384860cd944dfdd6055d8292562198540288dc5523
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
- rockdb = RocksDB.new "/tmp/file"
32
- rockdb.put(key, value)
33
- new_value = rockdb.get(key)
34
- rockdb.delete(key)
35
- rockdb.close
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
@@ -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 rocksdb_init(int argc, VALUE* argv, VALUE self);
12
- VALUE rocksdb_put(VALUE self, VALUE v_key, VALUE v_value);
13
- VALUE rocksdb_get(VALUE self, VALUE v_key);
14
- VALUE rocksdb_delete(VALUE self, VALUE v_key);
15
- VALUE rocksdb_close();
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
- rb_define_private_method(cRocksdb, "initialize", (METHOD)rocksdb_init, -1);
26
- rb_define_method(cRocksdb, "put", (METHOD)rocksdb_put, 2);
27
- rb_define_method(cRocksdb, "get", (METHOD)rocksdb_get, 1);
28
- rb_define_method(cRocksdb, "delete", (METHOD)rocksdb_delete, 1);
29
- rb_define_method(cRocksdb, "close", (METHOD)rocksdb_close, 0);
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 rocksdb_init(int argc, VALUE* argv, VALUE self) {
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 rocksdb_put(VALUE self, VALUE v_key, VALUE v_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 rocksdb_get(VALUE self, VALUE v_key){
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 rocksdb_close(){
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
  }
@@ -1,5 +1,5 @@
1
1
  module Rocksdb
2
2
  module Ruby
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
data/spec/db_spec.rb CHANGED
@@ -3,29 +3,54 @@ require "RocksDB"
3
3
 
4
4
  describe RocksDB do
5
5
  before do
6
- @rockdb = RocksDB.new "/tmp/file"
6
+ @rocksdb = RocksDB::DB.new "/tmp/file"
7
7
  end
8
8
 
9
9
  it 'should get data' do
10
- @rockdb.put("test:read", "1")
11
- @rockdb.get("test:read").should eq "1"
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
- @rockdb.put("test:put", "2").should be_true
16
- @rockdb.get("test:put").should eq "2"
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
- @rockdb.put("test:delete", "3")
21
- @rockdb.get("test:delete").should eq "3"
20
+ @rocksdb.put("test:delete", "3")
21
+ @rocksdb.get("test:delete").should eq "3"
22
22
 
23
- @rockdb.delete("test:delete").should be_true
24
- @rockdb.get("test:delete").should be_empty
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
- @rockdb.close
52
+ @rocksdb.close
29
53
  end
30
54
 
31
55
  end
56
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocksdb-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Isamu Arimoto