Это мой официальный первый вопрос здесь; Я приветствую любую критику моего поста, чтобы я мог узнать, как стать лучшим гражданином СО.
Я проверяю нереляционные СУБД для хранения потенциально больших списков отказа электронной почты, опираясь на MongoDB или RethinkDB, используя их соответствующие клиентские библиотеки Python. Болевой точкой моего приложения является объемная производительность вставки, поэтому я установил два сценария Python для вставки 20 000 записей в партиях по 5000 в оба файла MongoDB и RethinkDB.
Пиктограмма MongoDB script mongo_insert_test.py:
NUM_LINES = 20000
BATCH_SIZE = 5000
def insert_records():
collection = mongo.recips
i = 0
batch_counter = 0
batch = []
while i <= NUM_LINES:
i += 1
recip = {
'address': "test%[email protected]%d.com" % (i, i)
}
if batch_counter <= BATCH_SIZE:
batch.append(recip)
batch_counter += 1
if (batch_counter == BATCH_SIZE) or i == NUM_LINES:
collection.insert(batch)
batch_counter = 0
batch = []
if __name__ == '__main__':
insert_records()
Почти идентичный python RethinkDB script rethink_insert_test.py:
NUM_LINES = 20000
BATCH_SIZE = 5000
def insert_records():
i = 0
batch_counter = 0
batch = []
while i <= NUM_LINES:
i += 1
recip = {
'address': "test%[email protected]%d.com" % (i, i)
}
if batch_counter <= BATCH_SIZE:
batch.append(recip)
batch_counter += 1
if (batch_counter == BATCH_SIZE) or i == NUM_LINES:
r.table('recip').insert(batch).run()
batch_counter = 0
batch = []
if __name__ == '__main__':
insert_records()
В моей среде dev, MongoDB script вставляет за 20 000 записей:
$ time python mongo_insert_test.py
real 0m0.618s
user 0m0.400s
sys 0m0.032s
В той же среде RethinkDB script выполняет гораздо медленнее, вставляя 20 000 записей за 2 минуты:
$ time python rethink_insert_test.py
real 2m2.502s
user 0m3.000s
sys 0m0.052s
Мне не хватает чего-то огромного здесь в отношении того, как работают эти две СУБД? Почему RethinkDB так плохо справляется с этим тестом?
У моей машины Dev было около 1,2 ГБ доступной памяти для этих тестов.