Найти - Пользователи
Полная версия: Работа с одной БД из двух программ
Начало » Python для новичков » Работа с одной БД из двух программ
1 2 3
Rodegast
Выбирать БД нужно исходя из задачи и структуры данных, а не по принципу “мне SQL нравится”. ТС опиши свою задачу (что ты в базе хранить собираешься, какая будет нагрузка и т.п.)
AngelFrei
Rodegast
Добрый день. В БД будут храниться экземпляры классов в виде словарей, то есть каждый объект будет являться ключом и иметь в себе порядка 30-40 ключей с их значениями в виде строк и чисел. Таких записей должно быть в районе 200 000, для ускорения работы решил разбить один файл на множество, используя сортировку по первым двум буквам наименований, так как открытие одной такой БД через shelve происходило очень долго, а для выполнения кода нужны лишь 2 записи.
Надеюсь, понятно выразился?
Shaman
Для сомневающихся, на примере постгрес.
import psycopg2
 
try:
    conn1 = psycopg2.connect("dbname='test' user='user' host='localhost' password='user'")
    conn2 = psycopg2.connect("dbname='test' user='user' host='localhost' password='user'")
    conn3 = psycopg2.connect("dbname='test' user='anotherone' host='localhost' password='user'")
except:
    print "I am unable to connect to the database"
else:
    print "OK!"
>>> 
OK!
>>>
А иначе на всех трёхзвенок не напасёшься.
4kpt_III
AngelFrei
AngelFrei
Добрый день. В БД будут храниться экземпляры классов в виде словарей, то есть каждый объект будет являться ключом и иметь в себе порядка 30-40 ключей с их значениями в виде строк и чисел.

Атрибуты фиксированные?
AngelFrei
4kpt_III
Ключи фиксированные, а большинство их значений будут меняться
Rodegast
Тогда используй kv хранилища вроде редиса и сериализацию в json. Из встраиваемых Tokyo Cabinet неплохой, но сейчас он скорее мёртв чем жив.

> Ключи фиксированные, а большинство их значений будут меняться

Тогда ORM тоже можно попробовать.
4kpt_III
redis можно, но при росте количества записей может начать жрать память + есть вероятность того, что он помрет и данные будут потеряны. По скорости это самый высокоскоростной вариант. redis висит в памяти и дает возможность реализовать до 100000 запросов в секунду. Таки да, вариант хороший.

P.S. Можно воспользоваться транзакциями, хоть нужно проверять, будут ли они полноценно действовать при убийстве редиса и не приведет ли это к частичной потере данных.

AngelFrei
Сколько занимает файл shelve?
AngelFrei
4kpt_III
около 300мб
4kpt_III
Если сильный рост количества записей не предполагается, то пробуйте redis.

Общая документация
Маленькая книга по редис

Для питона
redis-py

Если предполагается, то тогда алхимия все же лучше.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB