Распараллеливание запроса выбора в sqlite Python, похоже, не улучшает производительность.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Распараллеливание запроса выбора в sqlite Python, похоже, не улучшает производительность.

Сообщение Anonymous »

Прочитав этот пост, я попытался сравнить распараллеливание и отсутствие распараллеливания в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Android улучшает производительность карты многомерных массивов
    Anonymous » » в форуме JAVA
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Android улучшает производительность карты многомерных массивов
    Anonymous » » в форуме Android
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Точная настройка модели трансформатора не улучшает производительность
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Почему «использование» улучшает производительность C#
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Улучшает ли использование окончательного ключевого слова в Java производительность?
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»