LINUX.ORG.RU

Какой фреймворк выбрать, для web-приложения без БД?

 


0

1

Обычно использую flask и в большинстве случаеум у меня один http запрос влечет за собой запрос к БД.

А сейчас мне хочется сделать небольшое приложение, в котором в принципе не будет БД и все данные будут храниться в памяти. Т.е. на каждого web-клиента создается свой экземляр класса, который будет висеть в памяти до победного, или пока он не удалится в связи с какими-то действиями web-клиента.

Знаю что у flask есть всякие flask.g и прочее, но мне кажется это как-то неудобно.

Что есть из решений более удобное для таких целей?

★★★★★

Т.е. на каждого web-клиента создается свой экземляр класса, который будет висеть в памяти до победного

Это же сессии?

vvn_black ★★★★★
()
Ответ на: комментарий от Int64

Попробуй jekyll

Зачем ты сюда это говно принес?

Siado ★★★★★
() автор топика
Ответ на: комментарий от ggrn

Немного может не в тему, попробуй tinydb

Не в тему, но штука кажись хорошая. Давно присматривал что-то типа sqlite но из разряда nosql, это похоже. Правда там говорится что с многопоточностью оно не дружит.

Siado ★★★★★
() автор топика

Любой, например, aiohttp.

flask.g

Оно глобальное же. Перечисли, чем тебя не устраивает обычный dict и поймёшь, что тебе нужно.

x3al ★★★★★
()
Ответ на: комментарий от Siado

не знаю, я его для одного проекта заюзал - очень неплох показался

bvn13 ★★★★★
()
Ответ на: комментарий от x3al

Оно глобальное же. Перечисли, чем тебя не устраивает обычный dict и поймёшь, что тебе нужно.

Обычный dict меня вполне устраивает. Проблема в том, что его надо пихать во flask.g что как бы неудобно.

Я хочу такой подход - сделать нормальный class, запихать его экземпляры в один глобальный dict и использовать на прямую

Siado ★★★★★
() автор топика

но ведь это и правда сессии! самое лучшее решение тут будет - голая java, все, что ты описал, там есть

anonymous
()
Ответ на: комментарий от vvn_black

В таком.

Да нет же. Мне даже после окончания сессий интересно чтобы инфа сохранялась в удобном виде. Так то с сессиями в любом фреймфорке проблем нет.

Забей на фреймворки, вливайся в асинхронщину https://github.com/aio-libs/aiohttp-session

aiohttp тыкал, все равно пляски с global и async надо делать. Хочется проще

Siado ★★★★★
() автор топика

А нода одна будет? Вообще фласк неплох.

demrnd
()
Ответ на: комментарий от demrnd

DATABASES = {}
MIDDLEWARE = ()
INSTALLED_APPS = ()

И мы получаем лёгкий микрофреймворк, который правда мало что умеет, но в задаче примерно это и требовалось.

x-term ★★
()

Так и БД в памяти хранит часть данных. Когда данных будет дофига. Она быстрее будет работать, чем если ты тупа данные в памяти будешь хранить.
Там же всякие индексы, все дела.

Int0l ★★
()
Последнее исправление: Int0l (всего исправлений: 1)
Ответ на: комментарий от demrnd

Хули, по делу говорит.

Если Flask не подходит, то я не знаю... Нужен ли?

Deleted
()
Ответ на: комментарий от Jopich1

Да че уже мелочиться когда можно на баше зафигачить

Siado ★★★★★
() автор топика

На самом деле есть очень простое решение, при котором ты можешь использовать абсолютно любой фрейворк - это sqlite3 в режиме in memory

Выдержка из документации:

«If the filename is »:memory:", then a private, temporary in-memory database is created for the connection. This in-memory database will vanish when the database connection is closed. Future versions of SQLite might make use of additional special filenames that begin with the ":" character. It is recommended that when a database filename actually does begin with a ":" character you should prefix the filename with a pathname such as "./" to avoid ambiguity."

k0valenk0_igor ★★★
()
Ответ на: комментарий от k0valenk0_igor

На самом деле есть очень простое решение, при котором ты можешь использовать абсолютно любой фрейворк - это sqlite3 в режиме in memory

Ерунда это, а не решение. С тем же успехом ничего не мешает использовать что-то более производительнее sqlite - тот же редис или даже мемкешд. Только вот изначально вопрос не в этом был, но все равно найдется кто-то кто попытается свою левую тему вставить

Siado ★★★★★
() автор топика
Ответ на: комментарий от Siado

На самом деле это - решение. Редис не позволит хранить модели, а это решение позволит. Причем сделает это прозрачно для фрейворка.

но все равно найдется кто-то кто попытается свою левую тему вставить
левую тему вставить

Слушай сюда: во-первых, если кто и вставил левую тему так это как раз ты. А во-вторых, если ты не ценишь что другие пришли тебе на помощь и теряют свою время помогая тебе, то ты просто гавнюк, и больше ничего. Как слышно? Перехожу на прием!

k0valenk0_igor ★★★
()
Последнее исправление: k0valenk0_igor (всего исправлений: 1)

поражает некомпетентность в этом треде. вообще!

сиадо! из твоего вопроса ясно, что ты вообще не понимаешь о чем говоришь. ты не понимаешь как работает веб- приложение и ты не понимаешь как работает программа на питоне (и вообще программы, видимо).

я оговорюсь, ни с фласками ни торнадами и прочим не работал, на питоне как-то делал демон с веб-частью (на черрипай по-моему) - данные держало по 70 дней (надо было код подменять и рестартил). не текло.

подсказка: для того, чтобы держать данные в памяти, _ничего_ специального делать не нужно, достаточно объявить имя и присвоить ему значение (т.е. объявить переменную, ахахах!)

проблема не в фреймворке, а в том, что ты всё равно такое веб-приложение построить не сможешь из-за своей некомпетентности.

твоя идея про 1 набор данных на клиента - она выдает твой уровень. потому что, ты всё равно это общие данные, а сериализовать к ним доступ их тредов конкретно ты всё не сможешь (хотя это очень просто в общем-то) из-за того, что не понимаешь как вообще что работает.

thomasbug
()
Ответ на: комментарий от k0valenk0_igor

вот! чаю вам за sqlite! я только не понимаю, вот что: 1. он будет плодить их в итоге, а невычитанные курсоры будут копиться (ну или он дисциплинированный и понимает, что делает....) и всё это будет течь гарантированно.

2. безопасна ли передача соединения в другой тред для memory базы? для дисковой в wal-режиме вроде да, и вроде даже об этом четко написано было официально (лень искать).

а этой передачи соедидениея ему не избежать. т.е. чтобы это избежать дано три условия (чтобы не передавать соединение):

- удерживать тред на любого клиента, запретить ресайклинт. т.е. фактичеки запретить пул как таковой (!). потом (т.к. у него на каждого что квалифайд на то чтобы считать клиентом - по треду получится) еще фоново считать время и вести учет, и глушить (т.е. разлочивать их и переводить на выход)

- гарантировать, что один «логический» клиент не затребует себе более одного «одновременного» запроса, а если затребует - детектировать и запредить. требование невыполнимое почти.

- как-то связывать тред с поступившим запросом. т.е. сделать разбор, на основании заголовков, заставить http-сервер-либу диспатчнуть ее в конкретный тред на обработку. черрипай (только с ним один раз работал) такого вроде не умеет, другие я думаю то же. ну и вообще безумная кострукция.

т.е. технически это всё можно сделать, ну лучше б оказалось, что есть официальные гарантии того, что она и в мемори-мод допускает передачу коннекшена в другой тред. тогда всё окажется проще!

thomasbug
()
Ответ на: комментарий от Int0l

Так и БД в памяти хранит часть данных
Она быстрее будет работать, чем если ты тупа данные в памяти будешь хранить.

а___ть!

thomasbug
()
Ответ на: комментарий от thomasbug

подсказка: для того, чтобы держать данные в памяти, _ничего_ специального делать не нужно, достаточно объявить имя и присвоить ему значение (т.е. объявить переменную, ахахах!)

Объяви, например, во фаск просто переменную, покажи рабочий код =)

Siado ★★★★★
() автор топика
Ответ на: комментарий от Siado

к твоему сведению в программировании переменные в программе («в питоне»), не во фласке.

с фласками и джангами не работал

thomasbug
()
Ответ на: комментарий от Siado

sqlite
там говорится что с многопоточностью оно не дружит

Не дружит с многопоточными инсертами, но в питоне ты с этим не столкнешься.

nikolnik ★★★
()

bottle (и я удивлен что его еще не посоветовали)

micronekodesu ★★★
()
Ответ на: комментарий от anonymous

Конечно сдох, последний коммит 18 часов назад, а с последнего релиза аж целый месяц прошел.

micronekodesu ★★★
()
Ответ на: комментарий от thomasbug

Ну так чего же ты тогда код не покажешь? Попытался блеснуть и в лужу сел?

Siado ★★★★★
() автор топика
Ответ на: комментарий от nikolnik

sqlite
там говорится что с многопоточностью оно не дружит
Не дружит с многопоточными инсертами, но в питоне ты с этим не столкнешься.

хватит нести чепуху, ламеры. sqlite поддерживает «многопоточные инсерты» (какой бы глупостью ни была это формулировка - «многопоточные инсерты», что опять выдает что ты не понимаешь о чем говоришь)

thomasbug
()
Ответ на: комментарий от k0valenk0_igor

как это связано с затронутой мной темой про допустимость передачи между тредами sqlite соединения в memory режиме? правильно, никак. вы что тоже из тех, кто не понимает как что работает, и тупо нечто использует?

К вашему сведению, такие темы, есть вам самому интересно, выясняются чтением документации на sqlite.org (что я всегда делаю и вам советую - много инетерсного найдете)

Ваших вопросов

и кстати у меня-то вопросов нет. есть и понимание и опыт, всё стабильно работает, в отличии от ОПа.

и да, зачем вы мне советуете какой-то «Sanic, Flask-like»? я так и не понял.

thomasbug
()
Ответ на: комментарий от thomasbug

2. безопасна ли передача соединения в другой тред для memory базы?

и кстати у меня-то вопросов нет

Когда человек пишет предложение и ставит в конце его знак "?", то это обычно называется «задавать вопрос».

А если этот человек еще и достаточно умен, то он, прежде чем кидаться умными терминами, задумается над тем, насколько конкретная реализация веб-сервера влияет на проблему безопасности обращений этого сервера к БД. И насколько эту проблему лечит уход от нитей в пользу сопрограмм, этот человек задумается так же.

Задумались? Тогда я возвращаю вам презентованный мне в предыдущем вашем посте «чай»))

k0valenk0_igor ★★★
()
Последнее исправление: k0valenk0_igor (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.