rroonga 0.9.2-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. data/AUTHORS +5 -0
  2. data/NEWS.ja.rdoc +114 -0
  3. data/NEWS.rdoc +116 -0
  4. data/README.ja.rdoc +65 -0
  5. data/README.rdoc +66 -0
  6. data/Rakefile +206 -0
  7. data/benchmark/common.rb +49 -0
  8. data/benchmark/read-write-many-small-items.rb +144 -0
  9. data/benchmark/write-many-small-items.rb +135 -0
  10. data/example/bookmark.rb +161 -0
  11. data/example/index-html.rb +89 -0
  12. data/example/search/config.ru +230 -0
  13. data/example/search/public/css/groonga.css +122 -0
  14. data/ext/.gitignore +2 -0
  15. data/ext/groonga/extconf.rb +93 -0
  16. data/ext/groonga/rb-grn-accessor.c +52 -0
  17. data/ext/groonga/rb-grn-array-cursor.c +36 -0
  18. data/ext/groonga/rb-grn-array.c +210 -0
  19. data/ext/groonga/rb-grn-column.c +573 -0
  20. data/ext/groonga/rb-grn-context.c +662 -0
  21. data/ext/groonga/rb-grn-database.c +472 -0
  22. data/ext/groonga/rb-grn-encoding-support.c +64 -0
  23. data/ext/groonga/rb-grn-encoding.c +257 -0
  24. data/ext/groonga/rb-grn-exception.c +1110 -0
  25. data/ext/groonga/rb-grn-expression-builder.c +75 -0
  26. data/ext/groonga/rb-grn-expression.c +731 -0
  27. data/ext/groonga/rb-grn-fix-size-column.c +166 -0
  28. data/ext/groonga/rb-grn-hash-cursor.c +38 -0
  29. data/ext/groonga/rb-grn-hash.c +294 -0
  30. data/ext/groonga/rb-grn-index-column.c +488 -0
  31. data/ext/groonga/rb-grn-logger.c +504 -0
  32. data/ext/groonga/rb-grn-object.c +1369 -0
  33. data/ext/groonga/rb-grn-operation.c +198 -0
  34. data/ext/groonga/rb-grn-patricia-trie-cursor.c +39 -0
  35. data/ext/groonga/rb-grn-patricia-trie.c +488 -0
  36. data/ext/groonga/rb-grn-procedure.c +52 -0
  37. data/ext/groonga/rb-grn-query.c +260 -0
  38. data/ext/groonga/rb-grn-record.c +40 -0
  39. data/ext/groonga/rb-grn-snippet.c +334 -0
  40. data/ext/groonga/rb-grn-table-cursor-key-support.c +69 -0
  41. data/ext/groonga/rb-grn-table-cursor.c +247 -0
  42. data/ext/groonga/rb-grn-table-key-support.c +714 -0
  43. data/ext/groonga/rb-grn-table.c +1977 -0
  44. data/ext/groonga/rb-grn-type.c +181 -0
  45. data/ext/groonga/rb-grn-utils.c +769 -0
  46. data/ext/groonga/rb-grn-variable-size-column.c +36 -0
  47. data/ext/groonga/rb-grn-variable.c +108 -0
  48. data/ext/groonga/rb-grn-view-accessor.c +53 -0
  49. data/ext/groonga/rb-grn-view-cursor.c +35 -0
  50. data/ext/groonga/rb-grn-view-record.c +41 -0
  51. data/ext/groonga/rb-grn-view.c +421 -0
  52. data/ext/groonga/rb-grn.h +698 -0
  53. data/ext/groonga/rb-groonga.c +107 -0
  54. data/extconf.rb +130 -0
  55. data/html/bar.svg +153 -0
  56. data/html/developer.html +117 -0
  57. data/html/developer.svg +469 -0
  58. data/html/download.svg +253 -0
  59. data/html/favicon.ico +0 -0
  60. data/html/favicon.xcf +0 -0
  61. data/html/footer.html.erb +28 -0
  62. data/html/head.html.erb +4 -0
  63. data/html/header.html.erb +17 -0
  64. data/html/index.html +147 -0
  65. data/html/install.svg +636 -0
  66. data/html/logo.xcf +0 -0
  67. data/html/ranguba.css +250 -0
  68. data/html/tutorial.svg +559 -0
  69. data/lib/1.8/groonga.so +0 -0
  70. data/lib/1.9/groonga.so +0 -0
  71. data/lib/groonga.rb +90 -0
  72. data/lib/groonga/context.rb +184 -0
  73. data/lib/groonga/expression-builder.rb +324 -0
  74. data/lib/groonga/patricia-trie.rb +85 -0
  75. data/lib/groonga/record.rb +311 -0
  76. data/lib/groonga/schema.rb +1191 -0
  77. data/lib/groonga/view-record.rb +56 -0
  78. data/license/GPL +340 -0
  79. data/license/LGPL +504 -0
  80. data/license/RUBY +59 -0
  81. data/misc/grnop2ruby.rb +49 -0
  82. data/pkg-config.rb +333 -0
  83. data/rroonga-build.rb +57 -0
  84. data/test-unit/Rakefile +40 -0
  85. data/test-unit/TODO +5 -0
  86. data/test-unit/bin/testrb +5 -0
  87. data/test-unit/html/classic.html +15 -0
  88. data/test-unit/html/index.html +25 -0
  89. data/test-unit/html/index.html.ja +27 -0
  90. data/test-unit/lib/test/unit.rb +323 -0
  91. data/test-unit/lib/test/unit/assertionfailederror.rb +25 -0
  92. data/test-unit/lib/test/unit/assertions.rb +1230 -0
  93. data/test-unit/lib/test/unit/attribute.rb +125 -0
  94. data/test-unit/lib/test/unit/autorunner.rb +360 -0
  95. data/test-unit/lib/test/unit/collector.rb +36 -0
  96. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  97. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  98. data/test-unit/lib/test/unit/collector/load.rb +144 -0
  99. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  100. data/test-unit/lib/test/unit/color-scheme.rb +102 -0
  101. data/test-unit/lib/test/unit/color.rb +96 -0
  102. data/test-unit/lib/test/unit/diff.rb +724 -0
  103. data/test-unit/lib/test/unit/error.rb +130 -0
  104. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  105. data/test-unit/lib/test/unit/failure.rb +136 -0
  106. data/test-unit/lib/test/unit/fixture.rb +176 -0
  107. data/test-unit/lib/test/unit/notification.rb +129 -0
  108. data/test-unit/lib/test/unit/omission.rb +191 -0
  109. data/test-unit/lib/test/unit/pending.rb +150 -0
  110. data/test-unit/lib/test/unit/priority.rb +180 -0
  111. data/test-unit/lib/test/unit/runner/console.rb +52 -0
  112. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  113. data/test-unit/lib/test/unit/runner/tap.rb +8 -0
  114. data/test-unit/lib/test/unit/testcase.rb +476 -0
  115. data/test-unit/lib/test/unit/testresult.rb +89 -0
  116. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  117. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  118. data/test-unit/lib/test/unit/ui/console/testrunner.rb +466 -0
  119. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +63 -0
  120. data/test-unit/lib/test/unit/ui/tap/testrunner.rb +92 -0
  121. data/test-unit/lib/test/unit/ui/testrunner.rb +28 -0
  122. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  123. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  124. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  125. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  126. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  127. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  128. data/test-unit/lib/test/unit/version.rb +7 -0
  129. data/test-unit/sample/adder.rb +13 -0
  130. data/test-unit/sample/subtracter.rb +12 -0
  131. data/test-unit/sample/test_adder.rb +20 -0
  132. data/test-unit/sample/test_subtracter.rb +20 -0
  133. data/test-unit/sample/test_user.rb +23 -0
  134. data/test-unit/test/collector/test-descendant.rb +133 -0
  135. data/test-unit/test/collector/test-load.rb +442 -0
  136. data/test-unit/test/collector/test_dir.rb +406 -0
  137. data/test-unit/test/collector/test_objectspace.rb +100 -0
  138. data/test-unit/test/run-test.rb +15 -0
  139. data/test-unit/test/test-attribute.rb +86 -0
  140. data/test-unit/test/test-color-scheme.rb +67 -0
  141. data/test-unit/test/test-color.rb +47 -0
  142. data/test-unit/test/test-diff.rb +518 -0
  143. data/test-unit/test/test-emacs-runner.rb +60 -0
  144. data/test-unit/test/test-fixture.rb +287 -0
  145. data/test-unit/test/test-notification.rb +33 -0
  146. data/test-unit/test/test-omission.rb +81 -0
  147. data/test-unit/test/test-pending.rb +70 -0
  148. data/test-unit/test/test-priority.rb +119 -0
  149. data/test-unit/test/test-testcase.rb +544 -0
  150. data/test-unit/test/test_assertions.rb +1151 -0
  151. data/test-unit/test/test_error.rb +26 -0
  152. data/test-unit/test/test_failure.rb +33 -0
  153. data/test-unit/test/test_testresult.rb +113 -0
  154. data/test-unit/test/test_testsuite.rb +129 -0
  155. data/test-unit/test/testunit-test-util.rb +14 -0
  156. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  157. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  158. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  159. data/test-unit/test/util/test_observable.rb +102 -0
  160. data/test-unit/test/util/test_procwrapper.rb +36 -0
  161. data/test/.gitignore +1 -0
  162. data/test/groonga-test-utils.rb +134 -0
  163. data/test/run-test.rb +58 -0
  164. data/test/test-array.rb +90 -0
  165. data/test/test-column.rb +316 -0
  166. data/test/test-context-select.rb +93 -0
  167. data/test/test-context.rb +73 -0
  168. data/test/test-database.rb +113 -0
  169. data/test/test-encoding.rb +33 -0
  170. data/test/test-exception.rb +93 -0
  171. data/test/test-expression-builder.rb +217 -0
  172. data/test/test-expression.rb +134 -0
  173. data/test/test-fix-size-column.rb +65 -0
  174. data/test/test-gqtp.rb +72 -0
  175. data/test/test-hash.rb +305 -0
  176. data/test/test-index-column.rb +81 -0
  177. data/test/test-logger.rb +37 -0
  178. data/test/test-patricia-trie.rb +205 -0
  179. data/test/test-procedure.rb +37 -0
  180. data/test/test-query.rb +22 -0
  181. data/test/test-record.rb +243 -0
  182. data/test/test-remote.rb +54 -0
  183. data/test/test-schema-view.rb +90 -0
  184. data/test/test-schema.rb +459 -0
  185. data/test/test-snippet.rb +130 -0
  186. data/test/test-table-cursor.rb +153 -0
  187. data/test/test-table-offset-and-limit.rb +102 -0
  188. data/test/test-table-select-normalize.rb +53 -0
  189. data/test/test-table-select.rb +150 -0
  190. data/test/test-table.rb +594 -0
  191. data/test/test-type.rb +71 -0
  192. data/test/test-variable-size-column.rb +98 -0
  193. data/test/test-variable.rb +28 -0
  194. data/test/test-vector-column.rb +76 -0
  195. data/test/test-version.rb +31 -0
  196. data/test/test-view.rb +72 -0
  197. data/text/TUTORIAL.ja.rdoc +392 -0
  198. data/text/expression.rdoc +284 -0
  199. metadata +276 -0
@@ -0,0 +1,49 @@
1
+ require 'benchmark'
2
+ require 'tempfile'
3
+
4
+ def memory_usage()
5
+ status = `cat /proc/#{$$}/status`
6
+ lines = status.split("\n")
7
+ lines.each do |line|
8
+ if line =~ /^VmRSS:/
9
+ line.gsub!(/.*:\s*(\d+).*/, '\1')
10
+ return line.to_i / 1024.0
11
+ end
12
+ end
13
+ return -1;
14
+ end
15
+
16
+ @items = []
17
+
18
+ def item(label, &block)
19
+ @items << [label, block]
20
+ end
21
+
22
+ def report(index=0)
23
+ width = @items.collect do |label, _|
24
+ label.length
25
+ end.max
26
+
27
+ label, block = @items[index]
28
+ if label.nil?
29
+ puts "unavailable report ID: #{index}"
30
+ puts "available IDs:"
31
+ @items.each_with_index do |(label, block), i|
32
+ puts "#{i}: #{label}"
33
+ end
34
+ exit 1
35
+ end
36
+
37
+ if index.zero?
38
+ puts(" " * (width - 1) + Benchmark::Tms::CAPTION.rstrip + "memory".rjust(14))
39
+ end
40
+ # GC.disable
41
+ before = memory_usage
42
+ result = Benchmark.measure(&block)
43
+ # GC.enable
44
+ GC.start
45
+ size = memory_usage - before
46
+
47
+ formatted_size = "%10.3f" % size
48
+ puts "#{label.ljust(width)} #{result.to_s.strip} #{formatted_size}MB"
49
+ end
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This benchmark is based on Tokyo Cabinet's benchmark at
4
+ # http://alpha.mixi.co.jp/blog/?p=791
5
+ #
6
+ # On my environment at 2009/07/14:
7
+ # % for x in {0..9}; do ruby benchmark/read-write-many-small-items.rb $x; done
8
+ # user system total real memory
9
+ # Hash 0.850000 0.170000 1.020000 ( 1.050703) 46.957MB
10
+ # groonga: Hash: memory 1.080000 0.180000 1.260000 ( 1.251981) 30.152MB
11
+ # groonga: Trie: memory 1.300000 0.120000 1.420000 ( 1.429549) 22.199MB
12
+ # groonga: Hash: file 1.070000 0.190000 1.260000 ( 1.276910) 30.156MB
13
+ # groonga: Trie: file 1.280000 0.150000 1.430000 ( 1.423066) 22.203MB
14
+ # Localmemcache: file 1.320000 0.150000 1.470000 ( 1.497013) 45.984MB
15
+ # TC: Hash: memory 0.940000 0.250000 1.190000 ( 1.248141) 48.758MB
16
+ # TC: Tree: memory 0.890000 0.140000 1.030000 ( 1.067693) 37.270MB
17
+ # TC: Hash: file 1.740000 2.390000 4.130000 ( 4.141555) 8.848MB
18
+ # TC: Tree: file 1.290000 0.180000 1.470000 ( 1.476853) 12.805MB
19
+ #
20
+ # CPU: Intel(R) Core(TM)2 Duo 2.33GHz
21
+ # Memory: 2GB
22
+ # Ruby: Debian GNU/Linux sid at 2009/07/14:
23
+ # ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]
24
+ # groonga: HEAD at 2009/07/14: fdaf58df5dd0195c10624eabee3e3f522f4af3f9
25
+ # Ruby/Groonga: trunk at 2009/07/14: r479
26
+ # Localmemcache: HEAD at 2009/07/14: 3121629016344dfd10f7533ca8ec68a0006cca21
27
+ # Tokyo Cabinet: 1.4.29
28
+ # Tokyo Cabinet Ruby: 1.27
29
+ #
30
+ # NOTE:
31
+ # * groonga, Localmemcache and Tokyo Cabinet are built with "-O3" option.
32
+ # * Ruby bindings of them are built with "-O2" option.
33
+
34
+ require File.join(File.dirname(__FILE__), "common.rb")
35
+
36
+ n = 500000
37
+
38
+ values = []
39
+ n.times do |i|
40
+ values << "%08d" % i
41
+ end
42
+
43
+ item("Hash") do
44
+ @hash = {}
45
+ values.each do |value|
46
+ @hash[value] = value
47
+ @hash[value]
48
+ end
49
+ end
50
+
51
+ begin
52
+ base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
53
+ $LOAD_PATH.unshift(File.join(base_dir, "ext"))
54
+ $LOAD_PATH.unshift(File.join(base_dir, "lib"))
55
+
56
+ require 'groonga'
57
+ tmp_dir = "/tmp/groonga"
58
+ FileUtils.rm_rf(tmp_dir)
59
+ FileUtils.mkdir(tmp_dir)
60
+ @database = Groonga::Database.create(:path => "#{tmp_dir}/db")
61
+
62
+ item("groonga: Hash: file") do
63
+ @hash = Groonga::Hash.create(:name => "Hash",
64
+ :key_type => "ShortText")
65
+ column_name = "value"
66
+ @column = @hash.define_column(column_name, "ShortText")
67
+ values.each do |value|
68
+ @hash.set_column_value(value, column_name, value)
69
+ @hash.column_value(value, column_name)
70
+ end
71
+ end
72
+
73
+ item("groonga: Trie: file") do
74
+ @trie = Groonga::PatriciaTrie.create(:name => "PatriciaTrie",
75
+ :key_type => "ShortText")
76
+ column_name = "value"
77
+ @column = @trie.define_column(column_name, "ShortText")
78
+ values.each do |value|
79
+ @trie.set_column_value(value, column_name, value)
80
+ @trie.column_value(value, column_name)
81
+ end
82
+ end
83
+ rescue LoadError
84
+ end
85
+
86
+ begin
87
+ require 'localmemcache'
88
+
89
+ item("Localmemcache: file") do
90
+ LocalMemCache.drop(:namespace => "read-write-many-small-items",
91
+ :force => true)
92
+ @db = LocalMemCache.new(:namespace => "read-write-many-small-items")
93
+ values.each do |value|
94
+ @db[value] = value
95
+ @db[value]
96
+ end
97
+ end
98
+ rescue LoadError
99
+ end
100
+
101
+ begin
102
+ require 'tokyocabinet'
103
+
104
+ item("TC: Hash: memory") do
105
+ @db = TokyoCabinet::ADB::new
106
+ @db.open("*#bnum=#{n}#mode=wct#xmsiz=0")
107
+ values.each do |value|
108
+ @db.put(value, value)
109
+ @db.get(value)
110
+ end
111
+ end
112
+
113
+ item("TC: Tree: memory") do
114
+ @db = TokyoCabinet::ADB::new
115
+ @db.open("+#bnum=#{n}#mode=wct#xmsiz=0")
116
+ values.each do |value|
117
+ @db.put(value, value)
118
+ @db.get(value)
119
+ end
120
+ end
121
+
122
+ hash_file = Tempfile.new(["tc-hash", ".tch"])
123
+ item("TC: Hash: file") do
124
+ @db = TokyoCabinet::ADB::new
125
+ @db.open("#{hash_file.path}#bnum=#{n}#mode=wct#xmsiz=0")
126
+ values.each do |value|
127
+ @db.put(value, value)
128
+ @db.get(value)
129
+ end
130
+ end
131
+
132
+ tree_file = Tempfile.new(["tc-tree", ".tcb"])
133
+ item("TC: Tree: file") do
134
+ @db = TokyoCabinet::ADB::new
135
+ @db.open("#{tree_file.path}#bnum=#{n}#mode=wct#xmsiz=0")
136
+ values.each do |value|
137
+ @db.put(value, value)
138
+ @db.get(value)
139
+ end
140
+ end
141
+ rescue LoadError
142
+ end
143
+
144
+ report(Integer(ARGV[0] || 0))
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This benchmark is based on Tokyo Cabinet's benchmark at
4
+ # http://alpha.mixi.co.jp/blog/?p=791
5
+ #
6
+ # On my environment at 2009/07/14:
7
+ # % for x in {0..9}; do ruby benchmark/write-many-small-items.rb $x; done
8
+ # user system total real memory
9
+ # Hash 0.650000 0.130000 0.780000 ( 0.799843) 46.957MB
10
+ # groonga: Hash: memory 0.650000 0.130000 0.780000 ( 0.781058) 23.477MB
11
+ # groonga: Trie: memory 0.690000 0.180000 0.870000 ( 0.862132) 15.516MB
12
+ # groonga: Hash: file 0.660000 0.120000 0.780000 ( 0.780952) 23.480MB
13
+ # groonga: Trie: file 0.660000 0.190000 0.850000 ( 0.867515) 15.520MB
14
+ # Localmemcache: file 0.900000 0.150000 1.050000 ( 1.052692) 39.312MB
15
+ # TC: Hash: memory 0.480000 0.150000 0.630000 ( 0.636297) 42.062MB
16
+ # TC: Tree: memory 0.440000 0.150000 0.590000 ( 0.593117) 30.570MB
17
+ # TC: Hash: file 1.000000 1.820000 2.820000 ( 2.989515) 2.160MB
18
+ # TC: Tree: file 0.720000 0.130000 0.850000 ( 0.877557) 6.102MB
19
+ #
20
+ # CPU: Intel(R) Core(TM)2 Duo 2.33GHz
21
+ # Memory: 2GB
22
+ # Ruby: Debian GNU/Linux sid at 2009/07/14:
23
+ # ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]
24
+ # groonga: HEAD at 2009/07/14: fdaf58df5dd0195c10624eabee3e3f522f4af3f9
25
+ # Ruby/Groonga: trunk at 2009/07/14: r479
26
+ # Localmemcache: HEAD at 2009/07/14: 3121629016344dfd10f7533ca8ec68a0006cca21
27
+ # Tokyo Cabinet: 1.4.29
28
+ # Tokyo Cabinet Ruby: 1.27
29
+ #
30
+ # NOTE:
31
+ # * groonga, Localmemcache and Tokyo Cabinet are built with "-O3" option.
32
+ # * Ruby bindings of them are built with "-O2" option.
33
+
34
+ require File.join(File.dirname(__FILE__), "common.rb")
35
+
36
+ n = 500000
37
+
38
+ values = []
39
+ n.times do |i|
40
+ values << "%08d" % i
41
+ end
42
+
43
+ item("Hash") do
44
+ @hash = {}
45
+ values.each do |value|
46
+ @hash[value] = value
47
+ end
48
+ end
49
+
50
+ begin
51
+ base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
52
+ $LOAD_PATH.unshift(File.join(base_dir, "ext"))
53
+ $LOAD_PATH.unshift(File.join(base_dir, "lib"))
54
+
55
+ require 'groonga'
56
+ tmp_dir = "/tmp/groonga"
57
+ FileUtils.rm_rf(tmp_dir)
58
+ FileUtils.mkdir(tmp_dir)
59
+ @database = Groonga::Database.create(:path => "#{tmp_dir}/db")
60
+
61
+ item("groonga: Hash: file") do
62
+ @hash = Groonga::Hash.create(:name => "Hash",
63
+ :key_type => "ShortText")
64
+ column_name = "value"
65
+ @column = @hash.define_column(column_name, "ShortText")
66
+ values.each do |value|
67
+ @hash.set_column_value(value, column_name, value)
68
+ end
69
+ end
70
+
71
+ item("groonga: Trie: file") do
72
+ @trie = Groonga::PatriciaTrie.create(:name => "PatriciaTrie",
73
+ :key_type => "ShortText")
74
+ column_name = "value"
75
+ @column = @trie.define_column(column_name, "ShortText")
76
+ values.each do |value|
77
+ @trie.set_column_value(value, column_name, value)
78
+ end
79
+ end
80
+ rescue LoadError
81
+ end
82
+
83
+ begin
84
+ require 'localmemcache'
85
+
86
+ item("Localmemcache: file") do
87
+ LocalMemCache.drop(:namespace => "write-many-small-items", :force => true)
88
+ @db = LocalMemCache.new(:namespace => "write-many-small-items")
89
+ values.each do |value|
90
+ @db[value] = value
91
+ end
92
+ end
93
+ rescue LoadError
94
+ end
95
+
96
+ begin
97
+ require 'tokyocabinet'
98
+
99
+ item("TC: Hash: memory") do
100
+ @db = TokyoCabinet::ADB::new
101
+ @db.open("*#bnum=#{n}#mode=wct#xmsiz=0")
102
+ values.each do |value|
103
+ @db.put(value, value)
104
+ end
105
+ end
106
+
107
+ item("TC: Tree: memory") do
108
+ @db = TokyoCabinet::ADB::new
109
+ @db.open("+#bnum=#{n}#mode=wct#xmsiz=0")
110
+ values.each do |value|
111
+ @db.put(value, value)
112
+ end
113
+ end
114
+
115
+ hash_file = Tempfile.new(["tc-hash", ".tch"])
116
+ item("TC: Hash: file") do
117
+ @db = TokyoCabinet::ADB::new
118
+ @db.open("#{hash_file.path}#bnum=#{n}#mode=wct#xmsiz=0")
119
+ values.each do |value|
120
+ @db.put(value, value)
121
+ end
122
+ end
123
+
124
+ tree_file = Tempfile.new(["tc-tree", ".tcb"])
125
+ item("TC: Tree: file") do
126
+ @db = TokyoCabinet::ADB::new
127
+ @db.open("#{tree_file.path}#bnum=#{n}#mode=wct#xmsiz=0")
128
+ values.each do |value|
129
+ @db.put(value, value)
130
+ end
131
+ end
132
+ rescue LoadError
133
+ end
134
+
135
+ report(Integer(ARGV[0] || 0))
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ base_dir = File.join(File.dirname(__FILE__), "..")
5
+ groonga_ext_dir = File.join(base_dir, 'ext')
6
+ groonga_lib_dir = File.join(base_dir, 'lib')
7
+ $LOAD_PATH.unshift(groonga_ext_dir)
8
+ $LOAD_PATH.unshift(groonga_lib_dir)
9
+
10
+ begin
11
+ require "groonga"
12
+ rescue LoadError
13
+ require "rubygems"
14
+ require "groonga"
15
+ end
16
+
17
+ require 'time'
18
+
19
+ # Groonga::Logger.register(:level => :debug) do |level, time, title, message, location|
20
+ # p [level, time, title, message, location]
21
+ # end
22
+
23
+ $KCODE = "UTF-8"
24
+ Groonga::Context.default_options = {:encoding => :utf8}
25
+
26
+ path = ARGV[0]
27
+ if path.nil?
28
+ require 'tmpdir'
29
+ require 'fileutils'
30
+ temporary_directory = File.join(Dir.tmpdir, "ruby-groonga")
31
+ FileUtils.mkdir_p(temporary_directory)
32
+ at_exit {FileUtils.rm_rf(temporary_directory)}
33
+ path = File.join(temporary_directory, "db")
34
+ end
35
+ persistent = true
36
+
37
+ p Groonga::Database.create(:path => path)
38
+
39
+ p(items = Groonga::Hash.create(:name => "Items",
40
+ :key_type => "ShortText",
41
+ :persistent => persistent))
42
+
43
+ p items.add("http://ja.wikipedia.org/wiki/Ruby")
44
+ p items.add("http://www.ruby-lang.org/")
45
+
46
+ p items.define_column("title", "Text", :persistent => persistent)
47
+
48
+ p(terms = Groonga::Hash.create(:name => "Terms",
49
+ :key_type => "ShortText",
50
+ :persistent => persistent,
51
+ :default_tokenizer => "TokenBigram"))
52
+ p terms.define_index_column("item_title", items,
53
+ :persistent => persistent,
54
+ :with_weight => true,
55
+ :with_section => true,
56
+ :with_position => true,
57
+ :source => "Items.title")
58
+
59
+ p items.find("http://ja.wikipedia.org/wiki/Ruby")["title"] = "Ruby"
60
+ p items.find("http://www.ruby-lang.org/")["title"] = "オブジェクト指向スクリプト言語Ruby"
61
+
62
+ p(users = Groonga::Hash.create(:name => "Users",
63
+ :key_type => "ShortText",
64
+ :persistent => persistent))
65
+ p users.define_column("name", "Text",
66
+ :persistent => persistent)
67
+
68
+ p(comments = Groonga::Array.create(:name => "Comments",
69
+ :persistent => persistent))
70
+ p comments.define_column("item", items)
71
+ p comments.define_column("author", users)
72
+ p comments.define_column("content", "Text")
73
+ p comments.define_column("issued", "Time")
74
+
75
+ p terms.define_index_column("comment_content", comments,
76
+ :persistent => persistent,
77
+ :with_weight => true,
78
+ :with_section => true,
79
+ :with_position => true,
80
+ :source => "Comments.content")
81
+
82
+ p users.add("moritan", :name => "モリタン")
83
+ p users.add("taporobo", :name => "タポロボ")
84
+
85
+
86
+ p items.find("http://d.hatena.ne.jp/brazil/20050829/1125321936")
87
+
88
+ p items.add("http://d.hatena.ne.jp/brazil/20050829/1125321936",
89
+ :title => "[翻訳]JavaScript: 世界で最も誤解されたプログラミング言語")
90
+
91
+ p comments.add(:item => "http://d.hatena.ne.jp/brazil/20050829/1125321936",
92
+ :author => "moritan",
93
+ :content => "JavaScript LISP",
94
+ :issued => 1187430026)
95
+
96
+ @items = items
97
+ @comments = comments
98
+ def add_bookmark(url, title, author, content, issued)
99
+ item = @items.find(url) || @items.add(url, :title => title)
100
+ @comments.add(:item => item,
101
+ :author => author,
102
+ :content => content,
103
+ :issued => issued)
104
+ end
105
+
106
+ p add_bookmark("http://practical-scheme.net/docs/cont-j.html",
107
+ "なんでも継続", "moritan", "継続 LISP Scheme", 1187568692)
108
+ p add_bookmark("http://d.hatena.ne.jp/higepon/20070815/1187192864",
109
+ "末尾再帰", "taporobo", "末尾再帰 Scheme LISP", 1187568793)
110
+ p add_bookmark("http://practical-scheme.net/docs/cont-j.html",
111
+ "なんでも継続", "taporobo", "トランポリン LISP continuation",
112
+ 1187568692.98765)
113
+ p add_bookmark("http://jp.rubyist.net/managinze",
114
+ "るびま", "moritan", "Ruby ドキュメント",
115
+ Time.now)
116
+ p add_bookmark("http://jp.rubyist.net/managinze",
117
+ "るびま", "taporobo", "Ruby 雑誌",
118
+ Time.now)
119
+ p add_bookmark("http://groonga.rubyforge.org/",
120
+ "ラングバ", "moritan", "Ruby groonga",
121
+ Time.parse("2009-07-19"))
122
+
123
+
124
+ records = comments.select do |record|
125
+ record["content"] =~ "LISP"
126
+ end
127
+
128
+ records.each do |record|
129
+ record = record.key
130
+ p [record.id,
131
+ record[".issued"],
132
+ record[".item.title"],
133
+ record[".author.name"],
134
+ record[".content"]]
135
+ end
136
+
137
+ p records
138
+
139
+ records.sort([{:key => ".issued", :order => "descending"}]).each do |record|
140
+ record = record.key
141
+ p [record.id,
142
+ record[".issued"],
143
+ record[".item.title"],
144
+ record[".author.name"],
145
+ record[".content"]]
146
+ end
147
+
148
+ records.group([".item"]).each do |record|
149
+ item = record.key
150
+ p [record.n_sub_records,
151
+ item.key,
152
+ item[".title"]]
153
+ end
154
+
155
+ p ruby_comments = @comments.select {|record| record["content"] =~ "Ruby"}
156
+ p ruby_items = @items.select("*W1:50 title:@Ruby")
157
+
158
+ p ruby_items = ruby_comments.group([".item"]).union!(ruby_items)
159
+ ruby_items.sort([{:key => "._score", :order => "descending"}]).each do |record|
160
+ p [record["._score"], record[".title"]]
161
+ end