Прочитав этот пост, я попытался сравнить распараллеливание и отсутствие распараллеливания в sqlite. Я использую библиотеку Python sqlite3 для создания базы данных, содержащей таблицу randNums, которая содержит два столбца: идентификатор и значение. Значение val — это случайное число от 0 до 1. Затем я выбираю все строки со значением val больше половины. Я сделал это дважды, чтобы сравнить время выполнения параллельной и непараллельной версий, однако они занимают одинаковое количество времени. Я хотел бы знать, неправильно ли я использую ключевое слово «PARALLEL» или мне нужно сначала включить распараллеливание с помощью команды Python.
Наконец, я также хотел бы знать чем отличается распараллеливание для разных баз данных, например, mysql и postgresql.
import sqlite3
from time import time
con = sqlite3.connect('mydatabase.db')
cursorObj = con.cursor()
cmd = ['PRAGMA table_info(randNums);']
cmd += ['SELECT count (*) from randNums where val>.5;']
cmd += ['SELECT count /*+ PARALLEL(4) */ (*) from randNums where val>.5;']
for c in cmd:
t = time()
cursorObj.execute(c)
print('command: %s' % c)
print(cursorObj.fetchall())
print('run time in seconds: %.3f\n\n' % (time()-t))
Запуск сценария Python, содержащего приведенный выше код, приводит к следующему выводу:
command: PRAGMA table_info(randNums);
[(0, 'id', 'INTEGER', 0, None, 1), (1, 'val', 'REAL', 0, None, 0)]
run time in seconds: 0.000
command: SELECT count (*) from randNums where val>.5;
[(49996009,)]
run time in seconds: 3.604
command: SELECT count /*+ PARALLEL(4) */ (*) from randNums where val>.5;
[(49996009,)]
run time in seconds: 3.598
Сначала я создал базу данных с помощью следующего кода:
import sqlite3
from random import uniform as rand
con = sqlite3.connect('mydatabase.db')
cursorObj = con.cursor()
cursorObj.execute("CREATE TABLE IF NOT EXISTS randNums(id integer PRIMARY KEY, val real)")
try:
for i in range(10**8):
if i%10**5==0: print(i)
cursorObj.execute("INSERT INTO randNums VALUES(%d, '%f')" % (i,rand(0,1)))
except:
print('datbase is already filled with data')
pass
con.commit()
Подробнее здесь: https://stackoverflow.com/questions/755 ... ve-perform
Распараллеливание запроса выбора в sqlite Python, похоже, не улучшает производительность. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Улучшает ли использование окончательного ключевого слова в Java производительность?
Anonymous » » в форуме JAVA - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-