Skip to content

Commit 4638f85

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 6d0f7d0 commit 4638f85

File tree

4 files changed

+250
-11
lines changed

4 files changed

+250
-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: 112 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,28 @@ local simple_operation_cases = {
172172
},
173173
op = 'insert',
174174
},
175+
insert_many = {
176+
func = 'crud.insert_many',
177+
args = {
178+
space_name,
179+
{
180+
{ 21, box.NULL, 'Ivan', 'Ivanov', 20, 'Moscow' },
181+
{ 31, box.NULL, 'Oleg', 'Petrov', 25, 'Moscow' },
182+
}
183+
},
184+
op = 'insert_many',
185+
},
186+
insert_object_many = {
187+
func = 'crud.insert_object_many',
188+
args = {
189+
space_name,
190+
{
191+
{ id = 22, name = 'Ivan', last_name = 'Ivanov', age = 20, city = 'Moscow' },
192+
{ id = 32, name = 'Oleg', last_name = 'Petrov', age = 25, city = 'Moscow' },
193+
}
194+
},
195+
op = 'insert_many',
196+
},
175197
get = {
176198
func = 'crud.get',
177199
args = { space_name, { 12 } },
@@ -203,6 +225,28 @@ local simple_operation_cases = {
203225
},
204226
op = 'replace',
205227
},
228+
replace_many = {
229+
func = 'crud.replace_many',
230+
args = {
231+
space_name,
232+
{
233+
{ 21, box.NULL, 'Peter', 'Ivanov', 40, 'Moscow' },
234+
{ 31, box.NULL, 'Ivan', 'Petrov', 35, 'Moscow' },
235+
}
236+
},
237+
op = 'replace_many',
238+
},
239+
replace_object_many = {
240+
func = 'crud.replace_object_many',
241+
args = {
242+
space_name,
243+
{
244+
{ id = 22, name = 'Peter', last_name = 'Ivanov', age = 40, city = 'Moscow' },
245+
{ id = 32, name = 'Ivan', last_name = 'Petrov', age = 35, city = 'Moscow' },
246+
}
247+
},
248+
op = 'replace_many',
249+
},
206250
update = {
207251
prepare = function(g)
208252
helpers.insert_objects(g, space_name, {{
@@ -232,6 +276,36 @@ local simple_operation_cases = {
232276
},
233277
op = 'upsert',
234278
},
279+
upsert_many = {
280+
func = 'crud.upsert_many',
281+
args = {
282+
space_name,
283+
{
284+
{ 26, box.NULL, 'Ivan', 'Ivanov', 20, 'Moscow' },
285+
{ 36, box.NULL, 'Oleg', 'Petrov', 25, 'Moscow' },
286+
},
287+
{
288+
{{'+', 'age', 1}},
289+
{{'+', 'age', 1}},
290+
},
291+
},
292+
op = 'upsert_many',
293+
},
294+
upsert_object_many = {
295+
func = 'crud.upsert_object_many',
296+
args = {
297+
space_name,
298+
{
299+
{ id = 27, name = 'Ivan', last_name = 'Ivanov', age = 20, city = 'Moscow' },
300+
{ id = 37, name = 'Oleg', last_name = 'Petrov', age = 25, city = 'Moscow' },
301+
},
302+
{
303+
{{'+', 'age', 1}},
304+
{{'+', 'age', 1}}
305+
},
306+
},
307+
op = 'upsert_many',
308+
},
235309
delete = {
236310
func = 'crud.delete',
237311
args = { space_name, { 12 } },
@@ -274,6 +348,18 @@ local simple_operation_cases = {
274348
op = 'insert',
275349
expect_error = true,
276350
},
351+
insert_many_error = {
352+
func = 'crud.insert_many',
353+
args = { space_name, {{ 'id' }} },
354+
op = 'insert_many',
355+
expect_error = true,
356+
},
357+
insert_object_many_error = {
358+
func = 'crud.insert_object_many',
359+
args = { space_name, {{ 'id' }} },
360+
op = 'insert_many',
361+
expect_error = true,
362+
},
277363
get_error = {
278364
func = 'crud.get',
279365
args = { space_name, { 'id' } },
@@ -305,6 +391,18 @@ local simple_operation_cases = {
305391
op = 'replace',
306392
expect_error = true,
307393
},
394+
replace_many_error = {
395+
func = 'crud.replace_many',
396+
args = { space_name, {{ 'id' }} },
397+
op = 'replace_many',
398+
expect_error = true,
399+
},
400+
replace_object_many_error = {
401+
func = 'crud.replace_object_many',
402+
args = { space_name, {{ 'id' }} },
403+
op = 'replace_many',
404+
expect_error = true,
405+
},
308406
update_error = {
309407
func = 'crud.update',
310408
args = { space_name, { 'id' }, {{'+', 'age', 1}} },
@@ -323,6 +421,18 @@ local simple_operation_cases = {
323421
op = 'upsert',
324422
expect_error = true,
325423
},
424+
upsert_many_error = {
425+
func = 'crud.upsert_many',
426+
args = { space_name, {{ 'id' }}, {{{'+', 'age', 1}}} },
427+
op = 'upsert_many',
428+
expect_error = true,
429+
},
430+
upsert_object_many_error = {
431+
func = 'crud.upsert_object_many',
432+
args = { space_name, {{ 'id' }}, {{{'+', 'age', 1}}} },
433+
op = 'upsert_many',
434+
expect_error = true,
435+
},
326436
delete_error = {
327437
func = 'crud.delete',
328438
args = { space_name, { 'id' } },
@@ -778,8 +888,8 @@ local function validate_metrics(g, metrics)
778888
t.assert_type(stats_sum, 'table', '`tnt_crud_stats` summary metrics found')
779889

780890

781-
local expected_operations = { 'insert', 'get', 'replace', 'update',
782-
'upsert', 'delete', 'select', 'truncate', 'len', 'count', 'borders' }
891+
local expected_operations = { 'insert', 'insert_many', 'get', 'replace', 'replace_many', 'update',
892+
'upsert', 'upsert_many', 'delete', 'select', 'truncate', 'len', 'count', 'borders' }
783893

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

0 commit comments

Comments
 (0)