| Криптопохуист
 
 С нами с 05.04.03
 Сообщения: 17158
 Рейтинг: 6019
 
 
   | 
								
									|  Добавлено: 13/09/06 в 19:08 |  
 
							Разница действительно незначительная, но все таки она есть      | Код: |   | CREATE TABLE `dm` ( `ip1` varchar(255) NOT NULL default '',
 `ip2` varchar(255) NOT NULL default '',
 KEY `ip1` (`ip1`,`ip2`)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
 CREATE TABLE `pentarh` (
 `ip1` varchar(15) NOT NULL default '',
 `ip2` varchar(15) NOT NULL default '',
 KEY `ip1` (`ip1`,`ip2`)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
 | 
 
После наполнения таблиц рандомными, но одинаковыми для обоих таблиц данными:
   | Код: |   | dm: Данные     33,944     Bytes
 Индекс    50,176    Bytes
 Всего    84,120    Bytes
 
 pentarh:
 Данные     33,800     Bytes
 Индекс    49,152    Bytes
 Всего    82,952    Bytes
 | 
 
Я все таки килобайт сэкономил    | 
					
						|  |  | 
					
						|  | 
					
						| 
 
 С нами с 13.08.03
 Сообщения: 533
 Рейтинг: 481
 
 
   | 
								
									|  Добавлено: 13/09/06 в 19:23 |  
 
							  | Pentarh писал: |   | Я все таки килобайт сэкономил   | 
 
не скромничай, аж 1168 байта
 
матанализ упоминать не будем
 
ну, с днем программиста тебя !
 
и всех коллег тоже    | 
					
						|  |  | 
					
						|  | 
					
						| 
 
 С нами с 18.01.06
 Сообщения: 322
 Рейтинг: 487
 
 
   | 
								
									|  Добавлено: 13/09/06 в 20:14 |  
 
							  | keenza писал: |   |   | Код: |   | string long2ip ( int proper_address )
 int ip2long ( string ip_address )
 | 
 Вопрос:
 я не понял зачем double? ip2long Integer возвращает
 
 | 
 
А то, что Integer в мускуле только положительный, а результат вовращаемый функцией ip2long() может быть отрицательным, поэтому надо юзать тип данных в базе double    | 
					
						|  |  | 
					
						|  | 
					
						| www.phpdevs.com
 
 С нами с 24.10.02
 Сообщения: 16633
 Рейтинг: 16105
 
 
 
             
   | 
								
									|  Добавлено: 13/09/06 в 20:22 |  
 
							С какого перепуга ИНТ вдруг только положительным стал ? unsigned убери, сразу отрицательным быть выучится. 
 
Но все таки положительный лучше    | 
					
						|  | 
								
									| 
											Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
 | 3 |  | 
					
						|  | 
					
						| 
 
 С нами с 05.07.03
 Сообщения: 394
 Рейтинг: 69
 
 
   | 
								
									|  Добавлено: 13/09/06 в 21:44 |  
 
							Может комуто пригодится: я ip кодирую в 8-ми байтную строку. Каждые два байта - шестнадцатиричное представление октета. Очень удобно. Например IP 127.0.0.1 будет представлено как 7F000001. (Длина строки, кстати, всегда фиксированная)
							 | 
					
						|  |  | 
					
						|  | 
					
						| Криптопохуист
 
 С нами с 05.04.03
 Сообщения: 17158
 Рейтинг: 6019
 
 
   | 
								
									|  Добавлено: 13/09/06 в 21:48 |  
 
							 
имхо, в unsigned int конвертить проще, занимает места меньше + еще можно к такому полю применить операции сравнения.
 | 
					
						|  |  | 
					
						|  | 
					
						| 
 
 С нами с 05.07.03
 Сообщения: 394
 Рейтинг: 69
 
 
   | 
								
									|  Добавлено: 13/09/06 в 21:52 |  
 
							Кстати, чего вы паритесь - знаковый или беззнаковый? То, что условно один бит принимают за знак - это сути не меняет. IP можно хранить и в том и в том варианте - разницы никакой нет.
							 | 
					
						|  |  | 
					
						|  | 
					
						| 
 
 С нами с 05.07.03
 Сообщения: 394
 Рейтинг: 69
 
 
   | 
								
									|  Добавлено: 13/09/06 в 21:56 |  
 
							  | Pentarh писал: |   | + еще можно к такому полю применить операции сравнения. | 
 
и что ты тут сравнивать собрался? ip сравнивают по октетам (если не имеется ввиду полное совпадение, а, скажем проверка на отношение к како-либо подсети. а в случае полного совпадения любой вариант прокатит). 
 Последний раз редактировалось: stillen (13/09/06 в 21:58), всего редактировалось 1 раз
 | 
					
						|  |  | 
					
						|  | 
					
						| Криптопохуист
 
 С нами с 05.04.03
 Сообщения: 17158
 Рейтинг: 6019
 
 
   | 
								
									|  Добавлено: 13/09/06 в 21:56 |  
 
							  | stillen писал: |   | Кстати, чего вы паритесь - знаковый или беззнаковый? То, что условно один бит принимают за знак - это сути не меняет. IP можно хранить и в том и в том варианте - разницы никакой нет. | 
 
Есть одна небольшая разница - операции сравнения будут работать некорректно. Если операции сравнения не нужны, тогда да. | 
					
						|  |  | 
					
						|  | 
					
						| 
 
 С нами с 13.09.06
 Сообщения: 434
 Рейтинг: 173
 
 
   | 
								
									|  Добавлено: 14/09/06 в 01:28 |  
 
							  | Код: |   | string long2ip ( int proper_address )
 int ip2long ( string ip_address )
 | 
 
честно говоря, несколько книг по ПХП прочитал, но такой функции не видел, спасибо. | 
					
						|  | 
								
									| 
											Мы есть то, к чему стремимся!
										 | 0 |  | 
					
						|  | 
					
						| Криптопохуист
 
 С нами с 05.04.03
 Сообщения: 17158
 Рейтинг: 6019
 
 
   | 
								
									|  Добавлено: 14/09/06 в 01:34 |  
 
							  | stillen писал: |   | и что ты тут сравнивать собрался? ip сравнивают по октетам (если не имеется ввиду полное совпадение, а, скажем проверка на отношение к како-либо подсети. а в случае полного совпадения любой вариант прокатит). | 
 
Ну че, вполне реально применить такое вот сравнение:
 
111.111.111.0 < ip < 111.111.111.222
 
или такое
 
111.111.111.0 < ip < 111.111.222.0
 
прямо в майскл запросе (если айпи конвертнул в int unsigned)
   | Код: |   | function ip2long_unsigned ($ip) {
 $l=ip2long($ip);
 if ($l==-1) $l=0;
 if ($l<0) $l += pow(2,32);
 return $l;
 }
 | 
 | 
					
						|  |  | 
					
						|  | 
					
						| Genuine Quality
 
 С нами с 28.08.05
 Сообщения: 652
 Рейтинг: 910
 
 
   | 
								
									|  Добавлено: 14/09/06 в 10:11 |  
 
							  | Crusader писал: |   | програмера решению которого в базу добавляется сотни тысяч записей в сутки - можно смело расстреливать. | 
   | xreload писал: |   | 4)Скрипт который добавляет несколько сотен тысяч записей в базу в сутки можешь смело удалять! | 
 
что-то вы мелко смотрите... ничего не вижу плохого в таком решении - если скрипт обрабатывает терабайты данных за сутки.
 
автор, есть хорошее решение, для того чтобы оптимизировать запросы по любым строкам. хранишь не реальную строку, а ее хэш, например md5 или sha, соответсвенно 32 и 40 байт, поиск по хэшу будет заметно быстрее, поскольку размер филда меньше. если тебе просто нужно проверить наличие - этого достаточно, если нужно получить строку, то делаешь еще одну таблицу, где varchar(255) без индекса, и внешний ключ на нее из таблицы с хэшами, по которому вытягиваешь реальное значение. существует мизерная вероятность, что у двух разных строк хэши совпадут, желательно для отсутствия багов ее разрумить.
 
удачи | 
					
						|  |  | 
					
						|  | 
					
						| www.phpdevs.com
 
 С нами с 24.10.02
 Сообщения: 16633
 Рейтинг: 16105
 
 
 
             
   | 
								
									|  Добавлено: 14/09/06 в 10:26 |  
 
							Мелочные подходы, сотня тысяч записей - не так и много для нормального проекта. 
 Я конечно понимаю что народ предпочитает делать свои базы которые надежнее мускуля или писать все в файлы где ошибок фактически не бывает по причине отсутсвия их контроля, но все таки зачем изобретать велосипед ?
 | 
					
						|  | 
								
									| 
											Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
 | 3 |  | 
					
						|  | 
					
						| 
 
 С нами с 16.06.03
 Сообщения: 192
 Рейтинг: 126
 
 
   | 
								
									|  Добавлено: 14/09/06 в 16:41 |  
 
							  | Цитата: |   | мелочные подходы, мелко смотрите... | 
 
господа
 
вообще то тут не база данных ООН по медпрепаратам, которая работает на оракле и PeopleSoft и имеет милиард транзакций каждые сутки
 
мы обсуждаем мелкий частный бизнес, где затраты на производительность ведут прямым путем к резкому изменению прибыли человека который задает вопросы.
 
за хеш +1 | 
					
						|  |  | 
					
						|  | 
					
						| 
 
 С нами с 25.08.05
 Сообщения: 313
 Рейтинг: 231
 
 
   | 
								
									|  Добавлено: 14/09/06 в 20:33 |  
 
							  | Simplex писал: |   | автор, есть хорошее решение, для того чтобы оптимизировать запросы по любым строкам. хранишь не реальную строку, а ее хэш, например md5 или sha, соответсвенно 32 и 40 байт...
 существует мизерная вероятность, что у двух разных строк хэши совпадут, желательно для отсутствия багов ее разрумить.
 удачи
 | 
 
можно немного подробнее выделенный абзац?
 
в каком случае хэш совпадет?
 
при использовании:
   | Код: |   | string sha1 ( string str [, bool raw_output] )
 
 | 
 | 
					
						|  |  | 
					
						|  | 
					
						| Genuine Quality
 
 С нами с 28.08.05
 Сообщения: 652
 Рейтинг: 910
 
 
   | 
								
									|  Добавлено: 14/09/06 в 21:05 |  
 
							  | keenza писал: |   | можно немного подробнее выделенный абзац? в каком случае хэш совпадет?
 при использовании:
 
   | Код: |   | string sha1 ( string str [, bool raw_output] )
 
 | 
 | 
 
насчет функций пхп ничего не скажу, так как на пхп не пишу.
 
функция хеширования по сути ставит в соответствие любому набору данных (строке) - хеш - число, которое всегда имеет фиксированную короткую длину. разумеется, для некоторых 2-х наборов данных это число может совпасть, поэтому по хэшу получить исходные данные нереально - их бесчисленное множество возмолжных вариантов.
 
не помню наизусть вероятность такого совпадения у двух строк до 255 длины, но она настолько незначительная, что ее можно даже не учитывать, просто сделай так, чтобы твое приложение не свалилось, когда у тебя в столбце с хешем будут две одинаковые записи | 
					
						|  |  | 
					
						|  | 
					
						| 
 
 С нами с 19.11.03
 Сообщения: 3973
 Рейтинг: 2362
 
 
   | 
								
									|  Добавлено: 14/09/06 в 21:20 |  
 
							  | ШЕФФ писал: |   |   | Код: |   | string long2ip ( int proper_address )
 int ip2long ( string ip_address )
 | 
 честно говоря, несколько книг по ПХП прочитал, но такой функции не видел, спасибо.
 | 
 
ты видать Мурзилку читал...
   | Simplex писал: |   | что-то вы мелко смотрите... ничего не вижу плохого в таком решении - если скрипт обрабатывает терабайты данных за сутки. | 
 
ага мильоны терабайтоф , ты видать не видел с какой переодичностью такие базы умирают вместе с проэктами и серверами     | 
					
						|  |  | 
					
						|  | 
					
						| Genuine Quality
 
 С нами с 28.08.05
 Сообщения: 652
 Рейтинг: 910
 
 
   | 
								
									|  Добавлено: 14/09/06 в 23:15 |  
 
							  | xreload писал: |   | ага мильоны терабайтоф , ты видать не видел с какой переодичностью такие базы умирают вместе с проэктами и серверами   | 
 
я не писал что база хранит терабайты данных  . я имел ввиду, что скрипты, которые вставляют большое количество строк в базу и их создатели имеют право на существование, поскольку приложение может производить обработку больших объемов данных.
 
миллион строк в таблице мускуля с неуник. индексом по varchar(32), вставка 50 строк на яве занимает 40мс, проверка наличия 50 строк по описанному индексу занимает примерно столько же. одновременно вышеописанные операции выполняются в среднем 15 потоками, 50 - это среднее значение вставки\селекта за раз.
 
никогда такие маленькие базы не вешались... может мы друг друга не так поняли? | 
					
						|  |  | 
					
						|  | 
					
						| 
 
 С нами с 19.11.03
 Сообщения: 3973
 Рейтинг: 2362
 
 
   | 
								
									|  Добавлено: 14/09/06 в 23:23 |  
 
							Дык яж некого не учу и не спорю, что право на жизнь такие минимализмы как сохранения логов сервера в мускуль  или запихивание всего интернета в базу еще и с  BLOB полями с пикчами    , но это правильным назвать нельзя , это элементарное непонимание вопроса и возможных последствий.
 
Кстати мы тут говорим о связке пхп+мускуль , а не о яве , это тоже давольно важный момент    
пы.сы.
 
15 потоков это не серьезно... | 
					
						|  |  | 
					
						|  |