Тихо и незаметно вышла ноль-первая версия библиотеки Pyrant, т.е. Pythonic Tyrant.
Pyrant — это полноценная питонья обвязка для Tokyo Tyrant, сетевого интерфейса для Tokyo Cabinet.
Tokyo Cabinet — это современное, легкое, гибкое и суперское хранилище данных (DBM). Оно поддерживает несколько типов БД, включая как простейшее key/value, так и «табличное», а вернее — документо-ориентированное. Последнее ставит Tokyo в один ряд с такими славными продуктами как CouchDB, MongoDB и др., при этом TC/TT значительно проще и легче, а поэтому быстрее. Кроме того, он поддерживает достаточно сложные запросы по данным (см. список операторов) с различением строчных и числовых значений. И еще для Tokyo Cabinet можно писать расширения на Lua.
Пример работы с Pyrant:
Здесь мы видим, что числа сохраняются как строки (хотя по ним можно делать выборки и сортировку как по числам). Вышеупомянутая библиотека PyModels позволяет автоматически обрабатывать входящие и исходящие значения нужным образом, а также оборачивает результаты выборки в экземпляры моделей, так что в итоге всё максимально удобно:
_________
Примечания:
* Pyrant+PyModels — действительно замена Django ORM, но серебряной пули нет. Давайте жить дружно. Базы данных всех типов, объединяйтесь. =)
UPD: Models были переименованы в PyModels, топик откорректирован.
Pyrant — это полноценная питонья обвязка для Tokyo Tyrant, сетевого интерфейса для Tokyo Cabinet.
Tokyo Cabinet — это современное, легкое, гибкое и суперское хранилище данных (DBM). Оно поддерживает несколько типов БД, включая как простейшее key/value, так и «табличное», а вернее — документо-ориентированное. Последнее ставит Tokyo в один ряд с такими славными продуктами как CouchDB, MongoDB и др., при этом TC/TT значительно проще и легче, а поэтому быстрее. Кроме того, он поддерживает достаточно сложные запросы по данным (см. список операторов) с различением строчных и числовых значений. И еще для Tokyo Cabinet можно писать расширения на Lua.
- Pyrant на PyPI и на bitbucket (патчи велкам!)
- Документация Pyrant
- Tokyo Cabinet (включая слайды)
- Tokyo Tyrant
Пример работы с Pyrant:
$ ttserver test.tct & $ python >>> import pyrant >>> t = pyrant.Tyrant() >>> t.query [] >>> t['guido'] = {'name': 'Guido', 'age': 53} >>> t['larry'] = {'name': 'Larry', 'age': 55} >>> t.query.filter(age__gt=53) [(u'guido', {u'name': u'Guido', u'age': u'53'})] >>> t.query.filter(name__matches='^.+ry$') [(u'larry', {u'name': u'Larry', u'age': u'55'})] >>> guys = t.query.filter(name='Guido') | t.query.filter(name='Larry') >>> guys.columns('age') [{u'age': u'53'}, {u'age': u'55'}]
Здесь мы видим, что числа сохраняются как строки (хотя по ним можно делать выборки и сортировку как по числам). Вышеупомянутая библиотека PyModels позволяет автоматически обрабатывать входящие и исходящие значения нужным образом, а также оборачивает результаты выборки в экземпляры моделей, так что в итоге всё максимально удобно:
>>> storage = Storage() # использует Pyrant >>> class Person(Model): ... name = Property() ... age = Number() ... def __unicode__(self): ... return self.name >>> q = Person.query(storage).filter(name__contains='G') >>> guido = q[0] >>> guido <Person Guido> >>> guido.age 53
_________
Примечания:
* Pyrant+PyModels — действительно замена Django ORM, но серебряной пули нет. Давайте жить дружно. Базы данных всех типов, объединяйтесь. =)
UPD: Models были переименованы в PyModels, топик откорректирован.