Например, какой двигатель?

А) у меня есть 1000000 доменных имен

б) Каждый домен имеет около 100000 сайтов

c) каждый сайт имеет около 10000 посещений в день / (5000 уникальных посещений в день)

d) Как владелец всех этих веб-сайтов, я хочу видеть, сколько посетителей на выбранных сайтах у меня было в выбранные периоды времени, например:

Сколько уникальных посетителей было с 4 декабря 1987 года по 23 апреля 2010 года на mydomain.com/tutorials

Сколько уникальных посетителей было с 30 августа 1996 года по 16 июля 2009 года на yourdomain.com/reference?

Для традиционной базы данных SQL это боль.

Какой самый умный подход? Какой механизм хранения использовать?

У меня есть только знания SQL. Любые дополнительные ресурсы с благодарностью.

2 ответа

Решение

С числами и потенциальными запросами, похожими на те, что вы перечислили, я бы очень хотел, чтобы простая база данных SQL (PSQL/TSQL) отвечала вашим потребностям. Вместо этого вам понадобится некоторая форма обработки OLAP, например SSAS (службы анализа SQL Server) или аналогичное предложение от Oracle.

Я думаю, что DB является лучшим подходом для этого варианта. Вам просто нужно создать пару таблиц и распределить данные между ними, например:

Table: Domains [id, name]
Table: Sites [id, domain_id, name]
Table: Visits [id, site_id, date]

так что вы можете выбрать, скажем, сказать:

SELECT COUNT(v.id) 
FROM Visits AS v 
RIGHT JOIN Sites AS s
ON v.site_id = s.id
RIGHT JOIN Domains AS d
ON s.domain_id = d.id
WHERE d.name = 'mydomain.com' 
      AND s.name = 'tutorials' 
      AND v.date BETWEEN startDate AND endDate 

startDate и endDate должны передаваться через язык программирования (PHP, ASP) или они могут быть установлены вручную в SELECT

Надеюсь, это поможет.

Другие вопросы по тегам