>>> conn.setbit(days[1], big_spender, 1)
0
На следующий день у нас снова появился наш друг big_spender, а также новый человек, которого мы назвали late_joiner:
>>> conn.setbit(days[2], big_spender, 1)
0
>>> conn.setbit(days[2], late_joiner, 1)
0
Получим счетчик ежедневных посещений за эти три дня:
>>> for day in days:
…·····conn.bitcount(day)
…
2
1
2
Посещал ли сайт заданный пользователь в указанный день?
>>> conn.getbit(days[1], tire_kicker)
0
Значит, tire_kicker не посещал сайт во второй день.
Сколько пользователей посещает сайт каждый день?
>>> conn.bitop('and', 'everyday', *days)
68777
>>> conn.bitcount('everyday')
1
Угадайте с трех попыток, кто это:
>>> conn.getbit('everyday', big_spender)
1
Наконец, сколько уникальных пользователей посетили сайт за эти три дня?
>>> conn.bitop('or', 'alldays', *days)
68777
>>> conn.bitcount('alldays')
3
У всех ключей Redis есть время жизни, или
>>> import time
>>> key = 'now you see it'
>>> conn.set(key, 'but not for long')
True
>>> conn.expire(key, 5)
True
>>> conn.ttl(key)
5
>>> conn.get(key)
b'but not for long'
>>> time.sleep(6)
>>> conn.get(key)
>>>
Команда expireat() указывает, что действие ключа истекает в заданное время эпохи Unix. Это может оказаться полезным для того, чтобы кэш оставался свежим и чтобы ограничить сессии авторизации.
Прочие серверы NoSQL
Серверы NoSQL, перечисленные здесь, могут работать с данными, объем которых превышает объем доступной памяти, и многие из них требуют использования нескольких компьютеров. В табл. 8.6 показаны наиболее популярные серверы и их библиотеки Python.
Сайт | Python API |
---|---|
Cassandra | pycassa |
CouchDB | couchdb-python |
HBase | happybase |
Kyoto | kyotocabinet |
MongoDB | mongodb |
Riak | riak-python-client |
Full-Text Databases
Наконец, существует особая категория баз данных для
Сайт | Python API |
Lucene | pylucene |
Solr | SolPython |
ElasticSearch | pyes |
Sphinx | sphinxapi |
Xapian | xappy |
Whoosh | Написан на Python, уже содержит API |
Упражнения
1. Присвойте строку 'This is a test of the emergency text system' переменной test1 и запишите переменную test1 в файл с именем test.txt.
2. Откройте файл test.txt и считайте его содержимое в строку test2. Совпадают ли строки test1 и test2?
3. Сохраните следующие несколько строк в файл books.csv. Обратите внимание на то, что, если поля разделены запятыми, вам нужно заключить поле в кавычки, если оно содержит запятую:
author,book
J R R Tolkien,The Hobbit
Lynne Truss,"Eats, Shoots & Leaves"
4. Используйте модуль csv и его метод DictReader, чтобы считать содержимое файла books.csv в переменную books. Выведите на экран значения переменной books. Обработал ли метод DictReader кавычки и запятые в заголовке второй книги?
5. Создайте CSV-файл books.csv и запишите его в следующие строки:
title,author,year
The Weirdstone of Brisingamen,Alan Garner,1960
Perdido Street Station,China Miéville,2000
Thud!Terry Pratchett,2005
The Spellman Files,Lisa Lutz,2007
Small Gods,Terry Pratchett,1992
6. Используйте модуль sqlite3, чтобы создать базу данных SQLite books.db и таблицу books, содержащую следующие поля: title (text), author (text) и year (integer).
7. Считайте данные из файла books.csv и добавьте их в таблицу book.
8. Считайте и выведите на экран графу title таблицы book в алфавитном порядке.