Від самого початку проектування цього блогу, ключовим питанням для мене було яку базу даних обрати і взагалі де зберігати дані.
Поки-що хочеться використовувати тільки безкоштовні варіанти, але кожен з них мав свої якісь обмеження.
Довго думав, як можна не платити за великі об'єми даних і знайшов для себе вихід — Таблиці на Google Drive.
Сюди можна завантажувати "будь-яку" кількість даних і навіть проводити аналітику по них. Скрипт для того щоб зробити запис в таблиці займає біля 20 рядків і не потребує піключення жодний API чи бібліотек.
Перше, що приходило в голову для зберігання інформації і користувацьких даних — це таки використати базу даних.
Найпростіше реляційна БД: Postgres або MySQL має обмеження на Heroku обсягом у 10 000 рядків. Це звісно найпростіший варіант по підключенню, але в майбутньому будуть проблеми зі зміною структури БД.
Або інший варіант — не реляційна MongoDB з обмеженням в 500 Мб. Трохи складніше в підключенні, важко поки-що порахувати скільки даних буде там зберігатись, проте надає велику гнучкість по структурі даних і надає більше можливостей по агрегації цих даних.
Головна проблема могла би виникнути в момент, коли в мене буде кілька проектів, які будуть потребувати кілька мільйонів записів. Тоді б довелось тримати кілька акаунтів, що не є зручно.
Далі я згадав про те, що можна легко зберігати дані в Google таблицях. Раніше мав досвід роботи з Google Drive API, але це було настільки складно, що цей шлях був відкинутий.
Після цього подумав про те, як працюють Google Forms. Вони б ідеально підійшли для того щоб збирати і зберігати інформацію типу "write-only". В принципі все, що знадобилось це програмно зімітувати відправку форми за допомогою POST запиту зі свого скрипту до серверів Google.
Перше, що нам знадобиться - це створити форму. Для цього:
### OK ###(див. код)
Тепер ваша форма готова, її можна переглянути натиснувши відповідну кнопку зверху. І лишився мінімум:
Тепер можна переходити до коду (приклад на Python):
Все, що треба змінити: це значення змінної
- import urllib
- def submit_form(data):
- google_form_url = 'https://docs.google.com/forms/d/{}/formResponse?{}'
- google_form_id = '1ZQZejRuKnhwfkGFdInIFlRlZiCek-JkbaAqKtE_OpE0'
- mapping_names_to_ids = {
- 'test': 'entry.226741144',
- }
- form_data = []
- for key in mapping_names_to_ids:
- form_data.append('{}={}'.format(mapping_names_to_ids[key], data.get(key)))
- url = google_form_url.format(google_form_id, '&'.join(form_data))
- resp = urllib.urlopen(url).read()
- if '### OK ###' in resp:
- print 'Successfully'
- else:
- print 'Error!'
- submit_form({'test': 'this is test data'})
google_form_idна ID вашої форми і значення словника
mapping_names_to_idsна ваші назви полів та їх ID. І сміло можна запускати з консолі чи з файлу.
data.get(key)на
request.POST.get(key). І якщо повертати HttpResponse, то у вас одразу з'явиться готова view-шка ;)
ви отримуєте скрипт, який дозволяє зберегти дані на будь-якому пристрої, що підключений до інтернету. Серед цих даних можуть бути статистика відвідуваності, таблиця підписників, якісь наукові обчислення, проміжні значення ваших програм тощо. Після того як у вас вже назбирається чимало рядків — ви зможете створювати діаграми чи іншу інфографіку на сусідніх аркушах поруч з відповідями. Успіху...
Якщо виникнуть питання, щодо того як запустити чи матимете пропозиції щодо покращення — пишіть...
А я тим часом постараюсь навести приклади агрегації даних через локальний інстанс MongoDB та мінімальної інфографіки по даних, які назбираю у цьому блозі...