Pull to refresh

Comments 6

В мире питона иногда кажется что все написано до нас…
Очень похоже на модуль redis-collections
О, вы совершенно правы, боюсь я просто недостаточно хорошо гуглил.
Ссылки на гитхаб раскидайте почаще. И уж точно рядом с фразой про pull-реквесты.
А в целом отличная идея. Одобряю. Может быть теперь попробую redis.
Абстракция в виде одного словаря на всю базу данных — вещь непрактичная для долговременного использования, неплохое её улучшение — namespaces.
Наиболее удобны в подобных плоских базах префиксные области имён:
r = Redis(host='localhost', port=6379, db=0)
d = Dictator(r, prefix='planets:')
d.set('Mars', 1000) # updates key 'planets:Mars' with value 1000
d['Venus'] = 2000 # gets value for key 'planets:Venus'
print 'Mars' in d
...

Но в Redis есть ещё тип данных Hash, который в некоторых случаях заменяет обычные ключи со значениями, и не имеет проблемы с глобальной областью видимости. Для него можно сделать почти такой же интерфейс:
r = Redis(host='localhost', port=6379, db=0)
dh = DictatorHash(r, key='Planets')
dh.set('Mars', 1000)
dh['Venus'] = 2000
print 'Mars' in dc

P.S. А следующим усовершенствованием являются batch-методы: get_many, set_many, delete_many и обобщённый batching в виде redis pipeline, потому что без них любая операция с данными (меньше 100 кб) в основном тратит время на прохождение запроса до базы данных и обратно.
Увы, удобного интерфейса для них в питоне нет, и поэтому приходится забыть про квадратные скобки и «in», которые так хорошо смотрелись в программах из 50 строк!

У меня нет опыта использования Redis в больших проектах и, я более чем уверен, что такая простая абстракция не потянет необходимый функционал. Мысль с prefix мне нравится, думаю стоит добавить подобную возможность.
Ещё много над чем есть подумать и что реализовать, пока лишь самое начало.

Sign up to leave a comment.

Articles