1. PHP / Говнокод #5688

    +162

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 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);
    	}

    Вот так у нас вставляют в базу :)

    Запостил: wmmorgun, 15 Февраля 2011

    Комментарии (11) RSS

    • Это вы называете "вставляют"? Онанисты какие-то...
      Ответить
      • Там везде сплошной онанизм.
        В логике записи статистики проверяется заходили ли сегодня более 10 раз, и если не заходили, то пишет новую запись. Весь цимес в том, что она не чистится и там скопилось 15млн записей, помимо этого каждая запись имеет свой уникальный id и еще два некислых составных ключа, размер индекса перевалил за 800Мб, а делается данная проверка ~20000 раз в сутки после чего ~15000 раз делается инсерт. Вот где онанизм.
        Ответить
        • Как недавно выразился не помню кто из местных комментаторов, благодаря этим людям мощность вычислительной техники неумолимо движется вперёд...
          Ответить
        • Каждая запись имеет свой уникальный ID? Оооо вы удивляете, а я думал дурак что ключ у материала ставить не надо xDDD
          Разумеется подъебал))) Там наверное даже имя есть? Ну вы монстер)))
          Ответить
          • Посмеялись и хватит.
            Это таблица статистики (<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 раз в сутки.
            Ответить
      • пидоры
        Ответить
    • Слушайте а автор этого чуда кажется мало чтото сброс делал переменной $data, тут надо лучше через строчку сбрасывать а то мало как то)))))
      Мне кажется автору необходимо почитать документацию по СУБД)))
      Ответить
      • Вы что, автор из себя весь умный-преумный, учил нас как надо экономить байты в бд, обрезая индексам размер до smallint... Типа если превысим, то увеличить не фиг делать.
        Естественно выигрыша на 65К записей никакого, а потом (товарищ давно не работает с нами) появились глюки, к нам посыпались запросы что не фига не работает, долго копались, оказалось размера не хватило. Вывод, сэкономленные килобайты - ничто против несколько-часового "лежания" сервиса, потраченных нервов и времени команды.
        Ответить
    • за такое построение SQL запроса следует сжигать на кострах
      Ответить

    Добавить комментарий