Схема базы данных
CREATE TABLE sites
(
site_id INTEGER PRIMARY KEY AUTOINCREMENT,
netloc TEXT UNIQUE NOT NULL,
last_visited REAL DEFAULT 0,
crawl_rate REAL DEFAULT 2,
crawl_frequency REAL DEFAULT 604800,
robots_txt TEXT DEFAULT 0,
robots_last_fetch REAL DEFAULT 0,
allow_all NUMERIC DEFAULT 0,
disallow_all NUMERIC DEFAULT 0,
active NUMERIC DEFAULT 0
)
CREATE TABLE urls
(
url_id INTEGER PRIMARY KEY AUTOINCREMENT,
site_id INTEGER REFERENCES sites (id) NOT NULL,
scheme TEXT NOT NULL,
path TEXT NOT NULL,
last_visited REAL DEFAULT 0,
UNIQUE( site_id, scheme, path)
)
Как вы, наверное, догадались, это для веб-сканера.
Я хочу получить N сайтов, с которыми связаны просматриваемые URL-адреса, и все
вышеупомянутые URL. URL сканируется, если url.last_visited + site.crawl_frequency < current_time
, где current_time происходит из функции питонов time.time()
. То, что я ищу, вероятно, начнется с чего-то вроде:
SELECT s.*, u.* FROM sites s, urls u ON s.site_id = u.site_id ...
Помимо этого я могу думать только о том, что GROUP BY
может сыграть какую-то роль.