![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| кмс |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 12.2.2009 Где: Казахстан Репутация: 1 Всего: 2 |
Здравствуйте.
Нужно создать базу, в который записывается результат пересчета 5 байт, или проще нужно пересчитать 1099511627775 вариантов и результат каждого варианта записать в базу(обычный бинарный файл). Каждый вариант занимает 11 байт. База получается огромная. Мне посоветовали посмотреть в сторону радужных таблиц. Прежде чем начать изучать тему может кто нибудь посоветует. Подойдут ли эти таблицы для моего случая. Вот примерный вариант базы http://s019.radikal.ru/i640/1401/03/2f215236cac5.png 1 и 2 это данные по которым будет искаться то что отмечено под 3. Вернее будет искаться только то что под 1, если находится то с данными под 2 будет производиться некая операция и если все сходится то поиск окончен. Вообщем нужен совет, можно ли в данном случае применить радужную таблицу? Это сообщение отредактировал(а) кмс - 13.1.2014, 17:40 |
|||
|
||||
| кмс |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 12.2.2009 Где: Казахстан Репутация: 1 Всего: 2 |
Если есть специалисты по этой теме, готов оплатить потраченное время на создание такой таблицы.
Вернее не на создание, там уйму времени уйдет, а на написание проги для ее создания. |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 5 Всего: 63 |
1099511627775 * 11 = 11 терабайт данных. Зачем вам записывать куда-то столько данных, если их можно рассчитать? Что вообще надо делать? Ну создали вы базу, а затем какие операции надо? Для чего это вообще делается?
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| кмс |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 12.2.2009 Где: Казахстан Репутация: 1 Всего: 2 |
Потому что рассчитать намного дольше чем потом в базе искать, на порядок дольше. Создавать базу придется, по предварительным расчетам около месяца и то если будет достаточно компов.
База нужна для хранения готовых расчетов. Я уже объяснил выше немного принцип. База состоит из трех значений, два по три байта и одному по 5 байт, по одному из трех байт будет поиск, если они находятся, со вторыми тремя байтами будет производится математический расчет и если расчет совпадает то будет считывать последние 5 байт. Более подробнее про базу сказать не могу Ничего криминального, но распространяться не хочу. Другие подобные базы имеют размер около 10-15гб, и поиск происходит ну 15-20 минут. мне намекнули что там тоже эти самые таблицы, правда или нет не знаю. Это сообщение отредактировал(а) кмс - 13.1.2014, 23:44 |
||||
|
|||||
| kami |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
+ служебная информация, индексы...
Даже если принять, что создание 1 записи займет 1 миллисекунду, один компьютер будет писать данные 34 года. Если предположить, что увеличение числа компьютеров даст линейный прирост скорости (на самом деле - несколько меньше), то чтобы получить 1 месяц нужно 408 компов (ну, ладно - все они четырехядерные, тогда - 102) А теперь, внимание - исходя из Вашего "на порядок дольше" и моего предположения в "1 мс" получается, что поиск значения должен вестись максимум за 0,1 мс??? Имхо, тут никакие индексы, партицирование и т.п. не помогут... хотя партиции - это вариант, но отца русской демократии они не спасут. Где у меня ошибка в расчетах? Ну и плюс ко всему - минимум 11 терабайт... многовато будет.
А не может такого быть, что эти базы содержат (дальше - полет фантазии) к примеру - промежуточные значения вычислений? или конечные, но с каким-нибудь шагом? Программа выбирает нужное ей и производит до-обработку или "интерполяцию значений, максимально близких к требуемому" (которая как раз и занимает основное время из 10-15 минут) ? Добавлено @ 22:44 Если использовать при расчетах не 1 миллисекунду, а (15-20 минут)*10, то итоговые значения получаются вообще неадекватными. Посему - не думаю, что в аналогах эта задача решалась "в лоб". Это сообщение отредактировал(а) kami - 14.1.2014, 22:45 |
||||
|
|||||
| boobie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 16.9.2011 Репутация: нет Всего: нет |
kami,
ошибся в расчетах Запилил программку с тремя потоками, каждый поток генерирует одиннадцатибайтовые числа от 10000000000 до 10001000000 в простом цикле. Все, что сгенерировал - кидает в массив. Цикл проходит за доли секунды, даже не могу отловить этот момент. Затем каждый поток записывает свой массив в файл. На запись 3-х файлов по 1 млн. одиннадцатибайтовых чисел (в каждый) ушла минута. Сама запись идет долго, но я думаю, что тут можно как-нибудь оптимизировать процесс. Сделать ассемблерные вставки, использовать нестандартные функции или еще что-нибудь. И да, процессор 6-летней давности не был загружен на всю катушку. И это все на гражданских Дельфях, в простых потоках с "синхронайзом" и записью с помощью writeln
|
|||
|
||||
| kami |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Где? Этот пример - не показатель (несмотря на то, что в нем де-факто не используются потоки) , я отталкивался от утверждений и
В примере же сами вычисления, с учетом всяческих ухищрений в современных процессорах (за исключением строки
Это сообщение отредактировал(а) kami - 15.1.2014, 10:55 |
||||
|
|||||
| boobie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 16.9.2011 Репутация: нет Всего: нет |
Потоки позволяют использовать все возможности многоядерных процессоров. Я создал 3 экземпляра данного класса, установив им разные флажки.
Я о том, что ни о каких 34 годах речь не идет) Максимум - полгода) А вот поиск по 10Тб базе - это да, это вопрос. Наверно для майнинга такие штуки нужны... Или аккаунты ВК ломать |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Это не относится к делу, но в Вашем коде не используюется многопоточность. Весь код выполняется в основном потоке. Если желаете продолжить дискуссию на эту тему - давайте вернемся в Ваш топик. А по теме - ТС утверждает, что создание каждой 11-байтной записи очень ресурсоемкая операция. Я привел расчеты. Единственным "узким" местом в моем сообщении было получение 34 лет. Расшифрую: 1099511627775 / 1000(мс) /60(сек)/60(мин)/24(час)/365(дней) = 34,8 лет. Вы утверждаете, что они не верны. Приведите доказательства. Это сообщение отредактировал(а) kami - 15.1.2014, 11:29 |
|||
|
||||
| кмс |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 12.2.2009 Где: Казахстан Репутация: 1 Всего: 2 |
Вот делал специально программку что бы сравнивать разницу между поиском и перебором.
Может быть там и не совсем точно, так как при поиске не учитываются некоторые нюансы, но и отклонения не столь существенные. http://www.sendspace.com/file/cny0tv PS: конечное значение это сколько вариантов перебирать. Это число делиться на количество потоков и каждый поток работает со своим отрезком. А так пробовал создавать базу, у меня 300мб (три потока каждый по 100мб) создавались примерно 30-40 минут, точнее не скажу, врубил и пошел телек смотреть, так заглядывал нет нет. Но и поиск будет не по всей базе. Например можно рассортировать по первому байту искомого, и того получается 255 баз, прога сразу будет искать в нужной базе. Это сообщение отредактировал(а) кмс - 15.1.2014, 11:53 |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
||||
|
||||
| кмс |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 12.2.2009 Где: Казахстан Репутация: 1 Всего: 2 |
Ну там в поиске просто сравнение
не учитывается загрузка базы и лазанье по ней, но и при переборе тоже это все не учитывается, прогу делал просто сравнить примерно разницу между поиском и перебором. Добавлено через 2 минуты и 11 секунд Ты введи все 5 байт - 1099511627775 Добавлено через 11 минут и 51 секунду Вот скрин, это поиск по всем вариантам. http://s005.radikal.ru/i210/1401/65/5093ca998501.png Но как говорил выше реальный поиск по все базе конечно будет дольше, но и если учитывать что искать во первых будет не по все базе, во вторых все таки не обязательно что придется искать до конца, наткнутся на искомое может в любое время Это сообщение отредактировал(а) кмс - 15.1.2014, 11:56 |
|||
|
||||
| boobie |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 16.9.2011 Репутация: нет Всего: нет |
kami, да ну! В одном потоке? Я привел класс потока:
Код с формой и запуском потоков такой (если интересно):
И он немного долбанутый, особенно таймер не к месту... Ну да пофиг, сделал его за 2 минуты... Создается 3 объекта того класса. А по поводу времени
За 1 мс моя прога делает 50 записей. И, я повторюсь, этот процесс можно ускорить, поэтому
это можно смело делить на 50. Вся проблема будет только в организации работы всей базы и поиском. Это сообщение отредактировал(а) boobie - 15.1.2014, 12:11 |
||||||||
|
|||||||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Весь код Вашего потока заключен в выполнении Synchronize. Если нажать F1, то выяснится, что Synchronize выполняет код в контексте основного потока (или потока-родителя, в зависимости от версии Delphi). Методы переключения контекста (емнип) разнятся так же в зависимости от версии Delphi. Все три потока при создании выполняют одно действие - пытаются переключиться в контекст основного потока приложения. И уже после переключения выполняется анонимный метод. Вывод: сколько бы таких потоков ни было создано, выполнение будет идти в контексте одного, что сразу сводит на нет необходимость их создания. Емнип, такой подход встречался в книгах Фленова (не к ночи будет помянут) и основанных на его книгах примерах. Совет: выкиньте эти книги и почитайте для начала хотя бы статью на Винграде. |
|||
|
||||
| кмс |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 12.2.2009 Где: Казахстан Репутация: 1 Всего: 2 |
Можно конечно уменьшить базу и без всяких таблиц. Например писать в нее только первые 6 байт, а искомые 5 байт будут адрес / 6
Но все равно база большая получается и не получится ее отсортировать, хотя и над сортировкой тоже в принципе можно подумать. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |