|
23 | 23 |
|
24 | 24 | import json |
25 | 25 | import os |
| 26 | +import random |
26 | 27 | import time |
| 28 | +import unittest |
27 | 29 | import warnings |
28 | 30 | from pathlib import Path |
29 | 31 |
|
|
50 | 52 | MAX_ITERATION_TIME = 10 |
51 | 53 | NUM_DOCS = 1000 |
52 | 54 | else: |
53 | | - NUM_ITERATIONS = 10 |
54 | | - MIN_ITERATION_TIME = 30 |
55 | | - MAX_ITERATION_TIME = 120 |
56 | | - NUM_DOCS = 10000 |
| 55 | + NUM_DOCS = 1_000_000 |
| 56 | + NUM_ITERATIONS = 1 |
| 57 | + MIN_ITERATION_TIME = 1 |
| 58 | + # NUM_ITERATIONS = 10 |
| 59 | + # MIN_ITERATION_TIME = 30 |
| 60 | + MAX_ITERATION_TIME = 1 |
| 61 | + # NUM_DOCS = 10000 |
57 | 62 |
|
58 | 63 | TEST_PATH = os.environ.get("TEST_PATH", Path(os.path.realpath(__file__)).parent.parent / "odm-data") |
59 | 64 |
|
@@ -397,3 +402,49 @@ def do_task(self): |
397 | 402 | def tearDown(self): |
398 | 403 | super().tearDown() |
399 | 404 | SmallFlatModel.objects.all().delete() |
| 405 | + |
| 406 | +class TestSmallFlatDocFilterPkByIn(SmallFlatDocTest, TestCase): |
| 407 | + def setUp(self): |
| 408 | + super().setUp() |
| 409 | + self.ids = [] |
| 410 | + models = [] |
| 411 | + fields = [str(ObjectId()) for _ in range(NUM_DOCS // 10)] |
| 412 | + for doc in self.documents: |
| 413 | + models.append(SmallFlatModel(**doc)) |
| 414 | + |
| 415 | + for model in models: |
| 416 | + model.field1 = fields[random.randint(0, len(fields) - 1)] |
| 417 | + |
| 418 | + SmallFlatModel.objects.bulk_create(models) |
| 419 | + self.ids = random.sample(fields, len(fields) // 10) |
| 420 | + # print(SmallFlatModel.objects.filter(id__in=[self.ids[0]]).explain()) |
| 421 | + |
| 422 | + def do_task(self): |
| 423 | + list(SmallFlatModel.objects.filter(field1__in=self.ids)) |
| 424 | + |
| 425 | + def tearDown(self): |
| 426 | + super().tearDown() |
| 427 | + SmallFlatModel.objects.all().delete() |
| 428 | + |
| 429 | +class TestLargeFlatDocFilterPkByIn(LargeFlatDocTest, unittest.TestCase): |
| 430 | + def setUp(self): |
| 431 | + super().setUp() |
| 432 | + # LargeFlatModel.objects.all().delete() |
| 433 | + # self.ids = [] |
| 434 | + # models = [] |
| 435 | + # # self.fields = [str(ObjectId()) for _ in range(NUM_DOCS // 10)] |
| 436 | + # for doc in self.documents: |
| 437 | + # models.append(LargeFlatModel(**doc)) |
| 438 | + # # for model in models: |
| 439 | + # # model.field1 = self.fields[random.randint(0, len(self.fields) - 1)] |
| 440 | + # |
| 441 | + # LargeFlatModel.objects.bulk_create(models) |
| 442 | + self.id = LargeFlatModel.objects.first().id |
| 443 | + print(LargeFlatModel.objects.filter(id__in=[self.id]).explain()) |
| 444 | + |
| 445 | + def do_task(self): |
| 446 | + list(LargeFlatModel.objects.filter(id__in=[self.id])) |
| 447 | + |
| 448 | + def tearDown(self): |
| 449 | + super().tearDown() |
| 450 | + # LargeFlatModel.objects.all().delete() |
0 commit comments