Skip to content

Commit f08319f

Browse files
committed
Add stats collection and pert tests for batch methods
Since we have PR #244 it will be nice to collect statistics for batch operations too. To establish the effectiveness of `crud.batch_insert()` method compared to `crud.insert()`, perf tests were added. `crud.insert()` in the loop and `crud.batch_insert()` are compared for different batch sizes. Closes #193
1 parent 492f60a commit f08319f

File tree

4 files changed

+242
-11
lines changed

4 files changed

+242
-11
lines changed

crud.lua

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ crud.insert_object = stats.wrap(insert.object, stats.op.INSERT)
3636

3737
-- @refer insert_many.tuples
3838
-- @function insert_many
39-
crud.insert_many = insert_many.tuples
39+
crud.insert_many = stats.wrap(insert_many.tuples, stats.op.INSERT_MANY)
4040

4141
-- @refer insert_many.objects
4242
-- @function insert_object_many
43-
crud.insert_object_many = insert_many.objects
43+
crud.insert_object_many = stats.wrap(insert_many.objects, stats.op.INSERT_MANY)
4444

4545
-- @refer get.call
4646
-- @function get
@@ -56,11 +56,11 @@ crud.replace_object = stats.wrap(replace.object, stats.op.REPLACE)
5656

5757
-- @refer replace_many.tuples
5858
-- @function replace_many
59-
crud.replace_many = replace_many.tuples
59+
crud.replace_many = stats.wrap(replace_many.tuples, stats.op.REPLACE_MANY)
6060

6161
-- @refer replace_many.objects
6262
-- @function replace_object_many
63-
crud.replace_object_many = replace_many.objects
63+
crud.replace_object_many = stats.wrap(replace_many.objects, stats.op.REPLACE_MANY)
6464

6565
-- @refer update.call
6666
-- @function update
@@ -72,11 +72,11 @@ crud.upsert = stats.wrap(upsert.tuple, stats.op.UPSERT)
7272

7373
-- @refer upsert_many.tuples
7474
-- @function upsert_many
75-
crud.upsert_many = upsert_many.tuples
75+
crud.upsert_many = stats.wrap(upsert_many.tuples, stats.op.UPSERT_MANY)
7676

7777
-- @refer upsert_many.objects
7878
-- @function upsert_object_many
79-
crud.upsert_object_many = upsert_many.objects
79+
crud.upsert_object_many = stats.wrap(upsert_many.objects, stats.op.UPSERT_MANY)
8080

8181
-- @refer upsert.object
8282
-- @function upsert

crud/stats/operation.lua

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,18 @@
66
return {
77
-- INSERT identifies both `insert` and `insert_object`.
88
INSERT = 'insert',
9+
-- INSERT_MANY identifies both `insert_many` and `insert_object_many`.
10+
INSERT_MANY = 'insert_many',
911
GET = 'get',
1012
-- REPLACE identifies both `replace` and `replace_object`.
1113
REPLACE = 'replace',
14+
-- REPLACE_MANY identifies both `replace_many` and `replace_object_many`.
15+
REPLACE_MANY = 'replace_many',
1216
UPDATE = 'update',
1317
-- UPSERT identifies both `upsert` and `upsert_object`.
1418
UPSERT = 'upsert',
19+
-- UPSERT_MANY identifies both `upsert_many` and `upsert_object_many`.
20+
UPSERT_MANY = 'upsert_many',
1521
DELETE = 'delete',
1622
-- SELECT identifies both `pairs` and `select`.
1723
SELECT = 'select',

test/integration/stats_test.lua

Lines changed: 104 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,28 @@ local simple_operation_cases = {
175175
},
176176
op = 'insert',
177177
},
178+
insert_many = {
179+
func = 'crud.insert_many',
180+
args = {
181+
space_name,
182+
{
183+
{ 21, box.NULL, 'Ivan', 'Ivanov', 20, 'Moscow' },
184+
{ 31, box.NULL, 'Oleg', 'Petrov', 25, 'Moscow' },
185+
}
186+
},
187+
op = 'insert_many',
188+
},
189+
insert_object_many = {
190+
func = 'crud.insert_object_many',
191+
args = {
192+
space_name,
193+
{
194+
{ id = 22, name = 'Ivan', last_name = 'Ivanov', age = 20, city = 'Moscow' },
195+
{ id = 32, name = 'Oleg', last_name = 'Petrov', age = 25, city = 'Moscow' },
196+
}
197+
},
198+
op = 'insert_many',
199+
},
178200
get = {
179201
func = 'crud.get',
180202
args = { space_name, { 12 } },
@@ -206,6 +228,28 @@ local simple_operation_cases = {
206228
},
207229
op = 'replace',
208230
},
231+
replace_many = {
232+
func = 'crud.replace_many',
233+
args = {
234+
space_name,
235+
{
236+
{ 21, box.NULL, 'Peter', 'Ivanov', 40, 'Moscow' },
237+
{ 31, box.NULL, 'Ivan', 'Petrov', 35, 'Moscow' },
238+
}
239+
},
240+
op = 'replace_many',
241+
},
242+
replace_object_many = {
243+
func = 'crud.replace_object_many',
244+
args = {
245+
space_name,
246+
{
247+
{ id = 22, name = 'Peter', last_name = 'Ivanov', age = 40, city = 'Moscow' },
248+
{ id = 32, name = 'Ivan', last_name = 'Petrov', age = 35, city = 'Moscow' },
249+
}
250+
},
251+
op = 'replace_many',
252+
},
209253
update = {
210254
prepare = function(g)
211255
helpers.insert_objects(g, space_name, {{
@@ -235,6 +279,28 @@ local simple_operation_cases = {
235279
},
236280
op = 'upsert',
237281
},
282+
upsert_many = {
283+
func = 'crud.upsert_many',
284+
args = {
285+
space_name,
286+
{
287+
{{ 26, box.NULL, 'Ivan', 'Ivanov', 20, 'Moscow' }, {{'+', 'age', 1}}},
288+
{{ 36, box.NULL, 'Oleg', 'Petrov', 25, 'Moscow' }, {{'+', 'age', 1}}},
289+
},
290+
},
291+
op = 'upsert_many',
292+
},
293+
upsert_object_many = {
294+
func = 'crud.upsert_object_many',
295+
args = {
296+
space_name,
297+
{
298+
{{ id = 27, name = 'Ivan', last_name = 'Ivanov', age = 20, city = 'Moscow' }, {{'+', 'age', 1}}},
299+
{{ id = 37, name = 'Oleg', last_name = 'Petrov', age = 25, city = 'Moscow' }, {{'+', 'age', 1}}},
300+
},
301+
},
302+
op = 'upsert_many',
303+
},
238304
delete = {
239305
func = 'crud.delete',
240306
args = { space_name, { 12 } },
@@ -277,6 +343,18 @@ local simple_operation_cases = {
277343
op = 'insert',
278344
expect_error = true,
279345
},
346+
insert_many_error = {
347+
func = 'crud.insert_many',
348+
args = { space_name, {{ 'id' }} },
349+
op = 'insert_many',
350+
expect_error = true,
351+
},
352+
insert_object_many_error = {
353+
func = 'crud.insert_object_many',
354+
args = { space_name, {{ 'id' }} },
355+
op = 'insert_many',
356+
expect_error = true,
357+
},
280358
get_error = {
281359
func = 'crud.get',
282360
args = { space_name, { 'id' } },
@@ -308,6 +386,18 @@ local simple_operation_cases = {
308386
op = 'replace',
309387
expect_error = true,
310388
},
389+
replace_many_error = {
390+
func = 'crud.replace_many',
391+
args = { space_name, {{ 'id' }} },
392+
op = 'replace_many',
393+
expect_error = true,
394+
},
395+
replace_object_many_error = {
396+
func = 'crud.replace_object_many',
397+
args = { space_name, {{ 'id' }} },
398+
op = 'replace_many',
399+
expect_error = true,
400+
},
311401
update_error = {
312402
func = 'crud.update',
313403
args = { space_name, { 'id' }, {{'+', 'age', 1}} },
@@ -326,6 +416,18 @@ local simple_operation_cases = {
326416
op = 'upsert',
327417
expect_error = true,
328418
},
419+
upsert_many_error = {
420+
func = 'crud.upsert_many',
421+
args = { space_name, { {{ 'id' }, {{'+', 'age', 1}}} }, },
422+
op = 'upsert_many',
423+
expect_error = true,
424+
},
425+
upsert_object_many_error = {
426+
func = 'crud.upsert_object_many',
427+
args = { space_name, { {{ 'id' }, {{'+', 'age', 1}}} } },
428+
op = 'upsert_many',
429+
expect_error = true,
430+
},
329431
delete_error = {
330432
func = 'crud.delete',
331433
args = { space_name, { 'id' } },
@@ -800,8 +902,8 @@ local function validate_metrics(g, metrics)
800902
t.assert_type(stats_sum, 'table', '`tnt_crud_stats` summary metrics found')
801903

802904

803-
local expected_operations = { 'insert', 'get', 'replace', 'update',
804-
'upsert', 'delete', 'select', 'truncate', 'len', 'count', 'borders' }
905+
local expected_operations = { 'insert', 'insert_many', 'get', 'replace', 'replace_many', 'update',
906+
'upsert', 'upsert_many', 'delete', 'select', 'truncate', 'len', 'count', 'borders' }
805907

806908
if g.params.quantiles == true then
807909
t.assert_items_equals(get_unique_label_values(quantile_stats, 'operation'), expected_operations,

0 commit comments

Comments
 (0)