Image board engine, Danbooru-style.
06ab98fa70
Using sqlalchemy's subqueryload to fetch tags works like this: 1. Get basic info about posts with query X 2. Copy query X 3. SELECT all tags WHERE post_id IN (SELECT post_ids FROM query X) 4. Associate the resulting tags with the posts When original query contains .order_by(func.random()), it looks like this: 1. SELECT post.* FROM post ORDER BY random() LIMIT 10 2. Copy "ORDER BY random() LIMIT 10" 3. SELECT tag.* FROM tag WHERE tag.post_id IN ( SELECT id FROM post ORDER BY random() LIMIT 10) 4. Disaster! Each post now has completely arbitrary tags! To circumvent this, we replace eager loading with lazy loading. This generates one extra query for each result row, but it has no chance of producing such anomalies. This behavior is activated only for queries containing "sort:random" and derivatives so it shouldn't hit performance too much. |
||
---|---|---|
client | ||
server | ||
.gitignore | ||
API.md | ||
config.yaml.dist | ||
INSTALL.md | ||
README.md |
This repository is under the process of being rewritten. Stay tuned! You can check the current progress on client here and server here.
The reasons behind this rewrite include:
- Improving user experience: better upload form, larger thumbnails, making top navigation stay out of user way. Maybe other goodies!
- Finally having good, well-documented REST API.
- Simplifying user registration.
- Replacing PHP with Python 3.5.
- Replacing prior JS mess with proper MVC.
- Replacing MySQL (MariaDB) with Postgres.
- Replacing
composer
,npm
,mod_rewrite
(=Apache),imagick
,ffmpeg
orgnash
andpdo_mysql
with justpip
,npm
andffmpeg
. - Replacing
grunt
withnpm
scripts. - Making hosting more flexible: offer simple self hosted application that can be combined with any reverse proxy.