rocksdb-ruby 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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