- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
public static function perform($table, $data, $action = 'insert', $parameters = '') {
reset($data);
if ($action == 'insert') {
$query = 'INSERT INTO ' . $table . ' (';
while (list($columns, ) = each($data)) {
$query .= $columns . ', ';
}
$query = substr($query, 0, -2) . ') values (';
reset($data);
while (list(, $value) = each($data)) {
switch ((string)$value) {
case 'now()':
$query .= 'NOW(), ';
break;
case 'null':
$query .= 'NULL, ';
break;
default:
$query .= '\'' . mysql_escape_string($value) . '\', ';
break;
}
}
$query = substr($query, 0, -2) . ')';
} elseif ($action == 'update') {
$query = 'UPDATE ' . $table . ' SET ';
while (list($columns, $value) = each($data)) {
switch ((string)$value) {
case 'now()':
$query .= $columns . ' = NOW(), ';
break;
case 'null':
$query .= $columns .= ' = NULL, ';
break;
default:
$query .= $columns . ' = \'' . mysql_escape_string($value) . '\', ';
break;
}
}
$query = substr($query, 0, -2) . ' WHERE ' . $parameters;
}
self::request($query);
}
telnet 15.02.2011 20:37 # 0
wmmorgun 15.02.2011 21:26 # +3
В логике записи статистики проверяется заходили ли сегодня более 10 раз, и если не заходили, то пишет новую запись. Весь цимес в том, что она не чистится и там скопилось 15млн записей, помимо этого каждая запись имеет свой уникальный id и еще два некислых составных ключа, размер индекса перевалил за 800Мб, а делается данная проверка ~20000 раз в сутки после чего ~15000 раз делается инсерт. Вот где онанизм.
telnet 16.02.2011 05:05 # +3
nethak 16.02.2011 13:19 # −4
Разумеется подъебал))) Там наверное даже имя есть? Ну вы монстер)))
wmmorgun 16.02.2011 13:33 # 0
Это таблица статистики (<name>_hits) посещения страниц одного из разделов, которая состоит из полей: id, hit_time, ip, affiliate_id, land, и <name>_id. Зачем там унимальный ID? В access.log-ах без этого обходятся... Помимо уникального id, есть еще 2 ключа "<name>_id" и составной affiliate_id, <name>_id, ip, hit_time.
А теперь объясните зачем это в таблице накопления данных, которые должны агрегироваться и чиститься раз в сутки?
P.S. Кстати по обновленной статистике запрос на количество заходов за сегодня с уникальной айпишки выполяется всего-то 70000 раз в сутки.
Lure Of Chaos 15.02.2011 21:51 # 0
wmmorgun 15.02.2011 21:52 # 0
Lure Of Chaos 15.02.2011 21:54 # 0
nethak 16.02.2011 13:21 # −2
Мне кажется автору необходимо почитать документацию по СУБД)))
wmmorgun 16.02.2011 13:40 # +1
Естественно выигрыша на 65К записей никакого, а потом (товарищ давно не работает с нами) появились глюки, к нам посыпались запросы что не фига не работает, долго копались, оказалось размера не хватило. Вывод, сэкономленные килобайты - ничто против несколько-часового "лежания" сервиса, потраченных нервов и времени команды.
Анонимус 16.02.2011 15:02 # +1