Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 21, 2016 00:17:39

Sova
Зарегистрирован: 2015-05-19
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

SQL база и работа с ней

doza_and
Вы сможете помочь с написанием кода?. с компенсацией потраченного времени…

Офлайн

#2 Фев. 21, 2016 09:28:35

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

SQL база и работа с ней

Время бесценно. Но помочь могу.



Офлайн

#3 Фев. 23, 2016 03:09:49

Sova
Зарегистрирован: 2015-05-19
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

SQL база и работа с ней

начал разбираться с SQLite3 и рпишел к выводу , что у меня база будет иметь 3000 строк в сутки, а это 300 килобайт базы данных файл me.db через месяц это будет уже 8,78 мегабайт база… насколько это будет проблематично для обработки и выборки… при условии что выборку придется делать иногда и за большой промежуток времени, т.е. пару месяцев, а иногда и за сутки, например….

целесообразно ли использование SQLite3 ?

Офлайн

#4 Фев. 23, 2016 06:24:19

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

SQL база и работа с ней

Sova
через месяц это будет уже 8,78 мегабайт база… насколько это будет проблематично для обработки и выборки…
9МБ со свистом помещаются в ОЗУ. Какие могут быть проблемы на таких мизерных объемах?!



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Фев. 23, 2016 06:56:29

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

SQL база и работа с ней

Sova
начал разбираться с SQLite3
Возьмите лучше hdf5. Распределите сразу массивы и пишите показания датчиков в нужные места массива. Кода будет на порядок меньше чем в sqlite3. Скорость выборки тоже будет раз в 10 выше , да и объем базы будет меньше. Я предполагаю что запись идет ровно раз в секунду.

Вообще разные технологии т.е. СУБД иерархическое хранилище, сериализация, дают примерно одинаковые результаты, только с несколько разным объемом кода.

Sova
насколько это будет проблематично для обработки и выборки
Разговор беспредметен пока вы не скажете как собираетесь обрабатывать данные, сколько времени можно потратить на обработку запроса. У Sqlite3 есть принципиальный недостаток. Вы получите питоновские тьюплы и вынуждены будете обрабатывать данные в питоновком цикле. Это очень медленно, гораздо лучше (будет работать в десятки раз быстрее) получить numpy.array и выполнять вычисления с ним.
Вам надо ответить на вопрос, сколько будет регистрируемых параметров, насколько критична потеря части последних данных.
Еще рекомендую посмотреть scipy, pandas, scikit в которых вы найдете алгоритмы обработки данных.



Офлайн

#6 Фев. 28, 2016 22:30:39

Sova
Зарегистрирован: 2015-05-19
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

SQL база и работа с ней

есть ли какие то ограничения на размер базы SqLite в мегабайтах.. или например 1200000 строк в 6 столбцах?

Офлайн

#7 Фев. 29, 2016 09:11:47

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

SQL база и работа с ней

Вот тут все ограничения. Максимальный размер файла базы - 140 терабайт.

Отредактировано ayb (Фев. 29, 2016 09:12:10)

Офлайн

#8 Март 6, 2016 12:41:09

Sova
Зарегистрирован: 2015-05-19
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

SQL база и работа с ней

ayb
Вот тут все ограничения. Максимальный размер файла базы - 140 терабайт.
Делал выборки из базы данных в 1200000 строк и шесть столбцов но выборки при помощи конструкции
import sqlite3
import datetime
dt = datetime.datetime.now()
dat = dt.strftime('%Y %m %d')# дата выборки
timot = '00 00 00'# время выборки от
timdo = '00 59 00'# время выборки до
vv1 = 0
vv2 = 0
vv3 = 0
#data = dt.strftime('%Y %m %d')#текущая дата 
#time1 = dt.strftime('%H %M %S')#текущее время
conn = sqlite3.connect('tutorial3.db')
#conn = sqlite3.connect(':memory:')
c = conn.cursor()
#conn.execute("create table if not exists person(data, time1, bunker, time2, status, ves)")
# проверка кол - ва итераций
i1 = 0
i2 = 0
i3 = 0
# проверка времени выполнения выборки
dt = datetime.datetime.now()
timedo = dt.strftime('%H %M %S')#текущее время до выборки
c.execute('select * from person order by time1')
for row in c:
    
          
#    print ('-'*10)
#    print ('ID:', row[2],'  ',row[5])
    if row[2]==1 and timot<=row[1]<=timdo:
        vv1 = vv1 + row[5]
        i1=i1+1
    if row[2]==2 and timot<=row[1]<=timdo:
        vv2 = vv2 + row[5]
        i2=i2+1
    if row[2]==3 and timot<=row[1]<=timdo:
        vv3 = vv3 + row[5]
        i3=i3+1
    
#    print ('First name:', row[1])
#    print ('Second name:', row[2])
#    print ('-'*10)
#    print ('co:', row[0])
c.close()
# проверка времени выполнения выборки
dt = datetime.datetime.now()
timeposle = dt.strftime('%H %M %S')#текущее время после выборки
print ('I = ',i1,' sum1 =',vv1)
print ('I = ',i2,' sum2 =',vv2)
print ('I = ',i3,' sum3 =',vv3)
print ('время до =',timedo)
print ('время после =',timeposle)

База на данный момент имеет 57 Мегабайт.
Т.е. мне нужно на самом деле обработать кусок таблицы с одного времени до другого.. и в этом куске сделать определенные операции, в данном случае суммирование.. А обраратывается весь массив и по условию проходит только часть таблицы , при том по факту это 5% максимум от всех строк… а то и 1 % .
Как сделать выборку данных локаничнее чтоб меньше времени занимала?
а то 10 секунд… это многовато…

Офлайн

#9 Март 6, 2016 14:21:44

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

SQL база и работа с ней

Офлайн

#10 Март 6, 2016 16:41:33

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

SQL база и работа с ней

Sova
Как сделать выборку данных локаничнее чтоб меньше времени занимала?
Да вы вообще не по тому пути идете на мой взгляд.

import h5py
import numpy as np
import time
# создание базы
n=1200000
data=np.zeros((n,6),dtype='f')
with h5py.File("a.h5","w") as f:
    f["a"]=data
# получаем базу 27Мб вместо 57
# выборка
t0=time.clock()
with h5py.File("a.h5","r") as f:
    selected=f["a"][1000000:1200000]
t1=time.clock()
print(t1-t0)
>>> 
0.00600972250874
# расчет
t0=time.clock()
selected.sum(axis=0)
t1=time.clock()
print(t1-t0)
>>> 
0.0124684806049

Посмотрите что у вас с этими SQL технологиями получилось по сравнению с файлами.
  • кода в 3 раза больше
  • выборка и расчет в 1000 медленнее
  • база в два раза больше по объему. hdf после зипования обычно база еще раза в 3 ужмется. Но это конечно от данных зависит.



Отредактировано doza_and (Март 6, 2016 16:42:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version