|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.04.2012, 21:48 | #1 |
Пользователь
Регистрация: 23.04.2011
Сообщений: 42
|
Всем привет.
Есть массив данных, который считывается из бинарного файла с помощью TBinaryReader. Вот структура данных (всего их 4, немного отличаются): Код:
Код:
Вопрос - с помощью чего вообще можно работать с такими данными? Таблицу даже не рассматриваю - записей может быть несколько миллионов. Может кто-нибудь чего подскажет? В общем решил все грузить в TList, создавая отдельный класс для хранения в этом самом TList. Данные туда грузятся и достаточно шустро, но вот как теперь искать дублирующиеся по параметрам строки мне пока не понятно. Ну не считая так сказать грубой силы - прямой перебор всех записей в двойном цикле Код:
Последний раз редактировалось Stilet; 18.04.2012 в 08:23. |
17.04.2012, 20:44 | #2 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Несколько миллионов в TList? Нереально. Если, конечно, запись не размером в один-два байта.
Может быть так: выбрать СУБД (FireBird, к примеру), загрузить всю инфу в БД, проиндексировав. Одним запросом узнать есть ли и сколько дубликатных записей. |
17.04.2012, 21:18 | #3 | |
Пользователь
Регистрация: 23.04.2011
Сообщений: 42
|
Цитата:
А почему именно FireBird???? P.S. запись конечно не 1-2 байта, а десятки байт :-) и таких записей могут быть миллионы... Прочитал про FireBird - вообще не хотелось бы подключать стороннюю СУБД, т.к. прога должна пахать просто при наличии exe-файла и без лишних движений... Последний раз редактировалось Freimaks; 17.04.2012 в 21:30. Причина: Прочитал про FireBird |
|
17.04.2012, 21:44 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
В FireBird есть вариант работы с базой без установки СУБД. Без провайдера правда не обойдешься, устанавливать прийдется
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
17.04.2012, 21:44 | #5 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Почему FB? Не знаю почему. Наверное, потому что знаю получше.
И еще потому, что сервер СУБД Firebird можно установить у себя для разработки, а на сторонних машинах использовать "монопольный" (embedded) сервер, который не требует установки. Да и установка сетевого сервера FB занимает 3 минуты, из которых 2,5 уходят на осмысления флажков установщика, которых не так и много. А главное, получить достаточно быстро требуемые данные из массива большого объема можно только на SQL СУБД (любой, разумеется, но современной). ------------- Аватар, а про какого провайдера речь? Я что-то пропустил? |
17.04.2012, 21:50 | #6 |
Пользователь
Регистрация: 23.04.2011
Сообщений: 42
|
Вот щас читаю про СУБД - я первый и последний раз под СУБД писал еще в универе.
Просто цель проги такова: 1. Читаем записи из бинарного файла; 2. Анализируем на наличией дублирующихся данных; 3. Производим действие по требованию (удаление или изменение) над дублями; 4. Пишем в новый бинарник. Вот читать и писать - это не самая большая проблема. Проблема - как реализовать пункты 2 и 3. Я уже 3 дня думаю над этим... Вот есть TClientDataSet, якобы встроенная СУБД, не требующая больше никаких телодвижений. Последний раз редактировалось Freimaks; 17.04.2012 в 21:56. |
17.04.2012, 21:57 | #7 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Печальный опыт реализации пункта 2 у вас уже есть.
Слабое звено здесь - поиск записей имеющих дубликатные значения в каких-то полях. Помощь в этом (ИМХО, конечно) может оказать SQL СУБД, которая как раз и заточена для максимально быстрого поиска в данных. 1. Читаем записи из файла и одновременно сливаем их в БД 2. Формируем SQL запрос на наличие дубликатов. 3. Формируем запросы по требованию на модификацию строк в БД 4. Читаем из БД данные и пишем в файл. |
17.04.2012, 22:04 | #8 |
Пользователь
Регистрация: 23.04.2011
Сообщений: 42
|
Да именно из-за такого удобства я и склонялся к СУБД, также и из-за готовых инструментов.
Я пытался еще юзать просто массивы для решения этой проблемы, но это был такой же бред как и TList. Еще нарыл вот такую СУБД - ElevateDB. Встраивается в исполняемый файл при компиляции. Завтра посмотрю обе и выберу наиболее подходящую... |
17.04.2012, 22:06 | #9 | ||
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 17.04.2012 в 22:12. |
||
17.04.2012, 22:09 | #10 | |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Цитата:
Промышленные СУБД располагают многими возможностями для ускорения поиска в данных. TClientDataSet - это всего лишь эрзац базы данных и в этом случае ничем не будет отличаться от TList/ |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с большим количеством текста в String иTextbox | Дмитрий999 | Visual C++ | 0 | 20.02.2012 20:07 |
Вывод данных в excel - массивом данных | sergey113 | Помощь студентам | 4 | 22.08.2011 17:16 |
работа с большим объемом данных | Ckif | Microsoft Office Excel | 1 | 14.09.2010 17:05 |
импорт из txt, работа с массивом данных, экспорт в txt | Danara | Microsoft Office Excel | 4 | 31.03.2010 00:26 |
Метод для управления большим количеством данных | eda | Microsoft Office Excel | 0 | 13.07.2009 10:50 |