Lemmy Lemmy 20 листопада 2022, 17:09

CMS-like бекенд з GraphQL API генеруємий з схеми

При­віт, все займа­ю­ся бекен­дом для UJournal. Читаю різно­ма­ні­тні ста­ті для того щоб зро­би­ти більш усві­дом­ле­ний вибір. Голов­ні яко­сті які я хочу зна­йти у рішен­ні: чесний SQL або дуже близь­кий до SQL язик. Авто­ри­за­ція та User-Access-Control. В іде­а­лі, хоче­тся щоб був інтер­фейс для управ­лі­н­ня даними.

Пере­ди­вив­ся рішення:

  • Superbase — чудо­ве ріше­н­ня, вико­ри­сто­ву­вав їх кла­уд для того щоб роби­ти пет-про­є­кти. Див­лю­ся на їх Self-Hosted ріше­н­ня. Тро­хи бен­те­жить те що доку­мен­та­ції мало;
  • Pocketbase — ріше­н­ня яке я зараз тестую. Чудо­ва адмін­ка та вигля­дає про­стим настрой­ка. Бачу пере­по­ни в тому що від­но­ше­н­ня між табли­ця­ми зро­бле­ні поверх­не­во. Про­чи­тав про SQLite у про­да­кши­нє і кажуть що на вели­ких об’є­мах малень­ких опе­ра­цій воно пра­цює так собі.

Зараз вирі­шив: або бра­ти чистий MySQL/​Postgress та роби­ти бек на Laravel/​AdonisJS або далі під­би­ра­ти більш-меньш під­хо­дя­щі CMS-like ріше­н­ня. Ось Keystone вигля­дає дуже під­хо­дя­щим ріше­н­ням. Може вико­ри­сто­ву­ва­ти БД Postgress та має роз­ви­ну­ту систе­му хуків. Зараз тестую. Зго­дом може виклам більш деталь­ний роз­бір цьо­го рішення.

  • 5
  • 7
  • 44

7 коментарів

  • novoreg novoreg 3 роки тому

    Нужно не забывать, что SQLite это библи­о­те­ка, а не стэн­да­лон СУБД. И там исполь­зу­ю­тся обычные b‑tree инде­ксы, как в pg/​mysql и рабо­та­ет ну никак не хуже, да и прои­зво­ди­тель­ность в целом более пред­ска­зу­е­мая и памя­ти нужно меньше. 

    Вооб­ще у само­го SQL кон­це­пту­аль­но все­гда были про­бле­мы с прои­зво­ди­тель­но­стью, из-за чего его не любят на хоть каких-то нагруз­ках. На нагруз­ках сло­жные запро­сы с разными там джои­на­ми и модными фича­ми созда­ют про­бле­мы, могут созда­ва­ться вре­мен­ные табли­цы, табли­цы ска­ни­ро­ва­ться не по тем инде­ксам или вооб­ще цели­ком, такие запро­сы нужно потом ана­ли­зи­ро­вать, после ана­ли­за пере­пи­сывать на про­стые запро­сы, где лег­ко поня­тно по како­му инде­ксу выби­ра­ю­тся дан­ные, нужно выки­дывать обер­тки вокруг SQL, что­бы писать запро­сы напря­мую и т.д. Ска­жем так, если прои­зво­ди­тель­ность важна, то SQL все рав­но при­де­тся исполь­зо­вать как про­сто наво­ро­чен­ное KV хра­ни­ли­ще. Речь об OLTP коне­чно, для ана­ли­ти­ки по дру­го­му все.

    Еще тут важно разо­бра­ться с инкре­мен­таль­ными бэка­па­ми и вос­ста­нов­ле­ни­ем, что­бы иметь возмо­жность отка­ти­ться в слу­чае чего и не делать бэкап целой базы, когда она неи­збе­жно распу­хнет. Ну как важный, можно потер­петь если на сер­ве­ре ссд диски и кана­лы тол­стые, и про­сто делать бэка­пы всей базы цели­ком каждую ночь, такое может и не один год проработать. 

    • 0
    • Lemmy Lemmy 3 роки тому · Автор

      Еще тут важно разо­бра­ться с инкре­мен­таль­ными бэка­па­ми и вос­ста­нов­ле­ни­ем, что­бы иметь возмо­жность отка­ти­ться в слу­чае чего и не делать бэкап целой базы, когда она неи­збе­жно распу­хнет. Ну как важный, можно потер­петь если на сер­ве­ре ссд диски и кана­лы тол­стые, и про­сто делать бэка­пы всей базы цели­ком каждую ночь, такое может и не один год проработать.

      Думаю брать что-то что явля­е­тся стан­дар­том. MySQL/​Postgress очень рас­про­стра­не­ны и гаран­ти­ро­ва­но мас­шта­би­ру­ю­тся. Читал что SQLite мас­шта­би­ро­вать можно, но то что это зало­же­но в дизайн базы — тако­го нет.

      Хоче­тся исполь­зо­вать обер­тку поверх БД, про­сто что­бы мень­ше писать кода, мень­ше кода — мень­ше оши­бок и мень­ше костов на под­держ­ку. Логи­ка при­мер­но такая.

      На малень­ком мас­шта­бе про­блем с прои­зво­ди­тель­но­стью ско­рей все­го видно не будет.

      Под­ска­жи (если зна­е­шь), на какие инсру­мен­ты можно посмо­треть для нагру­зо­чно­го тестирования?

      • 0
    • novoreg novoreg 3 роки тому

      Нагру­зо­чное тести­ро­ва­ние разное быва­ет, гото­вые нужны разве что пого­нять веб сер­вер и про­ве­рить его кон­фи­гу­ра­цию, лими­ты на коли­че­ство дескри­пто­ров, сое­ди­не­ний, такое вся­кое — подой­дет «ab» из паке­та apache2-utils (ubuntu) , ей коне­чно можно и про­сто побен­чмар­кить запро­сы на бекенд, но это не пока­жет, как запро­сы в реаль­но­сти будут отве­чать, а толь­ко общий овер­хед языка, пла­тфор­мы, фрейм­вор­ка, ком­му­ни­ка­ций по сути. 

      Для реаль­ной нагруз­ки при­де­тся само­му делать инстру­мент, если хоче­тся, но это не так нужно. Если уже зани­ма­ться чем-то таким, то лучше метри­ки собрать из сво­е­го кода и веб сер­ве­ра, т.е. запи­сывать в логи сколь­ко мили­се­кунд ушло на ответ от веб сер­ве­ра (nginx уме­ет), изме­рять хотя бы сэм­пла­ми запро­сы к БД, диску, изме­рять какие-то клю­че­вые фун­кции и тоже все это запи­сывать в логи. 

      • 0
    • Lemmy Lemmy 3 роки тому · Автор

      Спа­си­бо за рефе­ренс на ути­ли­ту ab. А есть мейн­стрим­ный маст-хев набор тул­зов для мони­то­рин­га nginx или все инди­ви­ду­аль­но под каждый проект?

      • 0
    • novoreg novoreg 3 роки тому

      Ниче­го не маст хев, можно обой­тись вооб­ще без ниче­го про­сто посма­три­вать логи. Дело ско­рее не в про­е­кте, а в кон­кре­тной инфра­стру­кту­ре, и как в ней заве­де­но, под то и дела­е­тся. Если ниче­го нет, то и заду­мыва­ться пока не о чем. А потом будет поня­тнее куда дви­га­ться, если понадобится.

      • 0
  • HimarsTime HimarsTime 3 роки тому

    Я в цьо­му нічо­го не тям­лю, але в мобіль­но­му дода­тку я юзав SQLite + Firebase 

    • 0
    • Lemmy Lemmy 3 роки тому · Автор

      Думаю для мобіль­но­го дода­тку юза­ти SQLite + Firebase це прям ок, тому що у бази даних один юзер — це аплі­ку­ха. Один кори­сту­вач — це воло­дар мобіль­но­го пристрою.

      • 0