1

Тема: Де краще порівнювати дані, що зберігаються в базі даних?

Привіт. Я колись вже запитував щось подібне, але не зовсім таке саме.
Я завантажую велику кількість даних з інтернету, далі конвертую ці данні у 64 бітний хеш і записую в базу даних для того, аби коли я завантажу ще одну купу даних, то щоб не доводилось шукати кеш знову для усієї-преусієї купи, а просто використовувати вже збережені хеші.
Ці хеші мені потрібні для побітового порівняння пари хешів, якщо різниця між хешами менше п'яти бітів, то необхідно показати ці два файла в моїй мегапрогі, аби я своїми очима міг переконатись, чи ці файли однакові, і лише з маленькою відмінністью, чи це різні файли, котрі просто схожі трохи.
База даних містить записи, котрі складаються з

  • індекс

  • шлях до файлу в файловій системі

  • хеш (строка з 64 символів)

  • флажок, котрий містить інфу, використаний цей файл чи не використаний

Так от. Після завантаження усіх файлів треба перевірити кожен новий файл з усіма іншими, аби виключити дублікати.
І от де мені це краще робити?
Якщо в програмі, то спочатку мені треба буде завантажувати всі старі записи, котрі містяться в базі, перевіряти кожен новий файл з кожним тим, що вже є в базі, виключити з нових файлів дублікати, і потім записати хеші нових файлів в базу даних.
Якщо в базі даних, то мені треба завантажити хеші нових файлів в базу даних, запустити процедуру в базі даних, котра б перевірила усі нові хеші з старими (а як позначити нові хеші? потрібно запам'ятовувати час додавання в базу даних), і потім повертати масив пар записів (типу, массив массивів, кожний елемент котрого буде містити два записи, у котрих різниця між хешами <5)
Як то краще і розумніше зробити, бо я не знаю?

2

Re: Де краще порівнювати дані, що зберігаються в базі даних?

Може, я погано зрозумів питання?
Бази даних для того і придумали, щоб всі операції з даними, які можна, в них робити :)
У вас в будь-якому разі має бути два типових запити для роботи з вашою базою:
- знайти, чи нема в базі такого хешу;
- додати хеш до бази.
От і додавайте з програми по одному нові зображення за допомогою цих запитів.

Подякували: FakiNyan1

3

Re: Де краще порівнювати дані, що зберігаються в базі даних?

koala написав:

Може, я погано зрозумів питання?
Бази даних для того і придумали, щоб всі операції з даними, які можна, в них робити :)
У вас в будь-якому разі має бути два типових запити для роботи з вашою базою:
- знайти, чи нема в базі такого хешу;
- додати хеш до бази.
От і додавайте з програми по одному нові зображення за допомогою цих запитів.

окей, так і зробим.

4

Re: Де краще порівнювати дані, що зберігаються в базі даних?

Стоп.
Мені потрібно не просто знайти, чи не має в базі такого хешу, а знайти чи є такий хеш, у якого побітова різниця з новим хешем менша п'яти
тіпа так

от 1 хеш, 0110010101
от 2 хеш, 0110001010
різниця-- 0000011111 = 5, то тіпо 5 бітів відмінні

І от саме про це я і запитував - де краще рахувати цю різницю, при умові, що кожен новий хеш треба буде порівнювати з усіма іншими

5

Re: Де краще порівнювати дані, що зберігаються в базі даних?

Думаю простіше смикати всі хеші з бд,і на ходу
(ніде не зберігаючи) робити порівняння хешу вхідного файлу з кожним поточним,що йде в циклі виводу з бд.

6

Re: Де краще порівнювати дані, що зберігаються в базі даних?

VTrim написав:

Думаю простіше смикати всі хеші з бд,і на ходу
(ніде не зберігаючи) робити порівняння хешу вхідного файлу з кожним поточним,що йде в циклі виводу з бд.

а так мона? воно не буде кожного разу смикати один і той самий запис?

7

Re: Де краще порівнювати дані, що зберігаються в базі даних?

FakiNyan написав:
VTrim написав:

Думаю простіше смикати всі хеші з бд,і на ходу
(ніде не зберігаючи) робити порівняння хешу вхідного файлу з кожним поточним,що йде в циклі виводу з бд.

а так мона? воно не буде кожного разу смикати один і той самий запис?

Ні,з чого б це?
Під час кожної ітерації буде новий хеш з бд..з яким і будете порівнювати.
Якщо я правильно вас зрозумів.

8 Востаннє редагувалося FakiNyan (13.11.2015 19:34:45)

Re: Де краще порівнювати дані, що зберігаються в базі даних?

VTrim написав:
FakiNyan написав:
VTrim написав:

Думаю простіше смикати всі хеші з бд,і на ходу
(ніде не зберігаючи) робити порівняння хешу вхідного файлу з кожним поточним,що йде в циклі виводу з бд.

а так мона? воно не буде кожного разу смикати один і той самий запис?

Ні,з чого б це?
Під час кожної ітерації буде новий хеш з бд..з яким і будете порівнювати.
Якщо я правильно вас зрозумів.

так я ж буду робити просто щось типу - select * from tableName limit 1 в циклі, звідки воно буде знати, що такий-то запис вже був, і треба повернути наступний?

9

Re: Де краще порівнювати дані, що зберігаються в базі даних?

Ну я роблю це так..
Псевдокод..
запит = запит_до_бд("SELECT  * FROM hash_files");
while(масив_хешів = створення_масиву(запит)){
друкувати масив_хешів['hash']; //вивід кожного хешу
}

Є і інші варіанти

10

Re: Де краще порівнювати дані, що зберігаються в базі даних?

В програмі.

11

Re: Де краще порівнювати дані, що зберігаються в базі даних?

А хеші дуже довгі? Якщо ні, то можна подумати над тим, щоб обчислювати всі хеші, у яких різниця з даним дорівнює п’яти і шукати вже їх, особливо якщо хешів в базі дуже багато. Тоді ващє бомба буде.

12

Re: Де краще порівнювати дані, що зберігаються в базі даних?

quez написав:

А хеші дуже довгі? Якщо ні, то можна подумати над тим, щоб обчислювати всі хеші, у яких різниця з даним дорівнює п’яти і шукати вже їх, особливо якщо хешів в базі дуже багато. Тоді ващє бомба буде.

64 знаки в хеші, це я його зараз зберігаю як строку

13

Re: Де краще порівнювати дані, що зберігаються в базі даних?

ну то шо робити?

14

Re: Де краще порівнювати дані, що зберігаються в базі даних?

Можу порадати робити те саме на ходу,але писати/зчитувати дані в JSON форматі в файлик.
І при виводі даних робити те ж саме.
//це якщо з бд не вийшло