Re[20]: Hibernate vs JDBC. Производительность.
От: unkis  
Дата: 14.06.07 11:30
Оценка:
Здравствуйте, dshe, Вы писали:

D>Здравствуйте, unkis, Вы писали:


U>>Здравствуйте, Blazkowicz, Вы писали:


B>>>Здравствуйте, unkis, Вы писали:


U>>>>А можно немножко поп подробней про MD5, я что-то не понял почему они ьогут быть одинаковыми?

B>>>Тю, это же логика.
B>>>1) Множество всех строк больше чем множество всех их MD5 hash кодов. Это надо объяснять почему?
U>>извини за глупость, но всё же хотелось бы услышать
D>сколько различных MD5 кодов может быть? 2^128 (длина digest'а 128 bit = 16 байт)
D>сколько различных строк может быть? если предположить, что символ это 1 байт, количество различных строк длиною 16 байт будет тоже 2^128. Но кроме строк длиною 16 байт существуют строки длиною 15 байт, 14 байт, 0 байт а также 17 байт, 18 байт... Получается, что мощность множества всех строк строго больше мощности множества всех MD5 кодов. Следовательно взаимно однозначного отображения между ними быть не может.

U>>А как насчёт SHA алгоритма, там как дела обстоят с этим?

D>Точно так же. Как и с любым другим digest'ом.

вот блин а как же тогда решить такую проблему?
Есть какие-то идеи?
Re[21]: Hibernate vs JDBC. Производительность.
От: danila.master Россия  
Дата: 15.06.07 07:19
Оценка:
Здравствуйте, unkis, Вы писали:

U>>>А как насчёт SHA алгоритма, там как дела обстоят с этим?

D>>Точно так же. Как и с любым другим digest'ом.

U>вот блин а как же тогда решить такую проблему?

U>Есть какие-то идеи?

Так а в чем проблема? Как я понял, MD5 используется для ускорения выборки из СУБД. Для этого он хорошо будет работать. Достаточно дополнительно вставить проверку по всем значащим полям (в select или в java-коде после загрузки объекта).
Re[22]: Hibernate vs JDBC. Производительность.
От: unkis  
Дата: 19.06.07 15:45
Оценка:
Здравствуйте, danila.master, Вы писали:

DM>Здравствуйте, unkis, Вы писали:


U>>>>А как насчёт SHA алгоритма, там как дела обстоят с этим?

D>>>Точно так же. Как и с любым другим digest'ом.

U>>вот блин а как же тогда решить такую проблему?

U>>Есть какие-то идеи?

DM>Так а в чем проблема? Как я понял, MD5 используется для ускорения выборки из СУБД. Для этого он хорошо будет работать. Достаточно дополнительно вставить проверку по всем значащим полям (в select или в java-коде после загрузки объекта).


А как вы думаете, могут ли быть грабли, если сделать следующее:

В место подписи SHA1, генерировать id просто объединяя строки.

К примеру, есть атрибуты A,B,C,D, так вот id будет равен "A-B-C-D"

интересно какие грабли могут быть в таком варианте?
Re[23]: Hibernate vs JDBC. Производительность.
От: RomikT Германия  
Дата: 19.06.07 16:01
Оценка:
Здравствуйте, unkis, Вы писали:

U>А как вы думаете, могут ли быть грабли, если сделать следующее:

U>В место подписи SHA1, генерировать id просто объединяя строки.
U>К примеру, есть атрибуты A,B,C,D, так вот id будет равен "A-B-C-D"
U>интересно какие грабли могут быть в таком варианте?

Маленькие грабельки:
A="a-x"
B="b"
и
A="a"
B="x-b"
После объединения дадут одинаковую строчку "a-x-b". Легко обходятся если есть символ, который заведомо не встречается в исходных строках, и не так легко если такого символа нет.

Так а чем вам не нравится вариант с MD5? Дополнительной проверкой в java-коде?
Re[24]: Hibernate vs JDBC. Производительность.
От: unkis  
Дата: 19.06.07 16:51
Оценка:
RT>Маленькие грабельки:
RT>A="a-x"
RT>B="b"
RT>и
RT>A="a"
RT>B="x-b"
RT>После объединения дадут одинаковую строчку "a-x-b". Легко обходятся если есть символ, который заведомо не встречается в исходных строках, и не так легко если такого символа нет.

RT>Так а чем вам не нравится вариант с MD5? Дополнительной проверкой в java-коде?


А не нравится мне это по следующей причине.

К примеру, я создаю новый объект, генерирую ключ, получаю md5, далее, делаю выборку по этому ключу, получаю объект из БД, сравниваю все атрибуты и вижу что ключ одинаковый, а поля не совпадают. и вот тут возникает вопрос, что сделать с моим(созданным) объектом?
Есть идеи?
Re[25]: Hibernate vs JDBC. Производительность.
От: RomikT Германия  
Дата: 19.06.07 18:04
Оценка:
Здравствуйте, unkis, Вы писали:

RT>>Так а чем вам не нравится вариант с MD5? Дополнительной проверкой в java-коде?

U>А не нравится мне это по следующей причине.
U>К примеру, я создаю новый объект, генерирую ключ, получаю md5, далее, делаю выборку по этому ключу, получаю объект из БД, сравниваю все атрибуты и вижу что ключ одинаковый, а поля не совпадают. и вот тут возникает вопрос, что сделать с моим(созданным) объектом?
U>Есть идеи?
Кладете его в базу и не напрягаетесь лишний раз по этому поводу
В следующий раз, когда будете искать объект по md5 select (ну или EJBQuery) вернет вам два объекта и сравнив остальные поля вы выберете нужный экземпляр. Да и вобще, за время жизни вашей программы это пренеприятнейшее событие произойдет от силы несколько раз (а скорее всего вообще ни разу).
Re[26]: Hibernate vs JDBC. Производительность.
От: unkis  
Дата: 19.06.07 19:28
Оценка:
RT>Кладете его в базу и не напрягаетесь лишний раз по этому поводу

как же я его положу в базу, если у меня md5 является ключом? база будет против иметь два одинаковых значения .
Re[27]: Hibernate vs JDBC. Производительность.
От: n0name2  
Дата: 19.06.07 19:46
Оценка:
Здравствуйте, unkis, Вы писали:

RT>>Кладете его в базу и не напрягаетесь лишний раз по этому поводу


U>как же я его положу в базу, если у меня md5 является ключом? база будет против иметь два одинаковых значения .


короче так:


create table t (
   sha1hash char(40),
   col01    number,
   col02    number,
   col03    number,
   primary key (col01, col02, col03)
);

create index sha1hash_idx on t(sha1hash);

....

select * from t where sha1hash = ? and col01 = ? and col02 = ? and col03 = ?


примерно так надо делать выборку. это будет быстро т.к. sha1hash_idx индекс высокоселективный.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.