Форум: "Начинающим";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];
ВнизВыбор структуры для хранения данных Найти похожие ветки
← →
LDV (2010-10-15 10:39) [0]В программе анализируются файлы. По каждому из файлов нужно ВРЕМЕННО хранить данные (FileName, Ver, Size, CRC). Какую структуру грамотнее всего использовать для хранения этих данных?
1. TStringList.AddObject(FileName, TMyObject.Create(Ver, Size, CRC);
2. Наследник TList.Add(FileName, Ver, Size, CRC);
3. XML
4. другие варианы
← →
DVM © (2010-10-15 10:43) [1]2.
Только хранить в нем указатели на записи, содержащие вышеперечисленные поля. И даже может быть не наследник, а класс включающий в себя TList. Иногда это удобнее.
← →
Медвежонок Пятачок © (2010-10-15 10:44) [2]3.
← →
Anatoly Podgoretsky © (2010-10-15 10:47) [3]> LDV (15.10.2010 10:39:00) [0]
Записи.
← →
Медвежонок Пятачок © (2010-10-15 10:47) [4]только 3 и никаких других вариантов.
во первых готовая иерархия (с тлистом она будет велосипедно-подпорочной)
во вторых встроенный sql-like поиск. (с тлистом придется писать велосипедную реализацию)
в третьих готовые способы визуализации и всякие разные отчеты.
ну и многое другое.
← →
DVM © (2010-10-15 10:48) [5]
> Медвежонок Пятачок © (15.10.10 10:44) [2]
Я когда писал ответ, подумал, ща придет медвежонок и его ответ будет однозначен :)
← →
DVM © (2010-10-15 10:49) [6]
> Медвежонок Пятачок © (15.10.10 10:47) [4]
а как там со скоростью?
← →
Плохиш © (2010-10-15 10:54) [7]
> По каждому из файлов нужно ВРЕМЕННО хранить данные (FileName,
> Ver, Size, CRC). Какую структуру грамотнее всего использовать
> для хранения этих данных?
TClientDataSet/TMemTable
← →
Медвежонок Пятачок © (2010-10-15 10:59) [8]а как там со скоростью?
Со скоростью там все очень быстро
← →
DVM © (2010-10-15 11:08) [9]
> Медвежонок Пятачок © (15.10.10 10:59) [8]
А давай может сравним, если есть время? Тебе, как евангелисту от XML, думаю тоже будет интересно.
Суть сравнения:
1) Добавляем в списки инфу о всех файлах и папках (в т.ч. и вложенных) папки Windows. Замеряем время.
2) Делаем выборку 1000 произвольных записей. Замеряем время.
Ну еще и потребности памяти можно замерить.
Сравнивать будем XML vs TList
← →
Медвежонок Пятачок © (2010-10-15 11:12) [10]да легко.
только в сравнении давай еще учтем время на реализацию самой задачи.
← →
DVM © (2010-10-15 11:15) [11]
> только в сравнении давай еще учтем время на реализацию
> самой задачи.
не совсем понял, время на программирование что ли?
← →
Плохиш © (2010-10-15 11:16) [12]
> DVM © (15.10.10 11:08) [9]
> Медвежонок Пятачок © (15.10.10 11:12) [10]
Пацаны, у слона всё-равно длиннее.
← →
Медвежонок Пятачок © (2010-10-15 11:19) [13]не совсем понял, время на программирование что ли?
Ага
← →
DVM © (2010-10-15 11:24) [14]
> Медвежонок Пятачок © (15.10.10 11:19) [13]
ну давай, я ща набросаю вариант с TList и выложу сюда, процедуры скана папки и т.д. одинаковые будут думаю, чтоб точнее сравнение было. А ты переделай на XML. Счетчик тоже сделаю.
← →
Медвежонок Пятачок © (2010-10-15 11:25) [15]Ок
← →
sniknik © (2010-10-15 11:41) [16]> Я когда писал ответ, подумал, ща придет медвежонок и его ответ будет однозначен :)
аналогично.
> TClientDataSet/TMemTable
TADODataset
← →
Медвежонок Пятачок © (2010-10-15 11:49) [17]Ну типа я голосуя за 3 не предполагал, что эта пятница уйдет на бодание со всеми вами в одиночку
← →
sniknik © (2010-10-15 11:59) [18]а чего бодаться? зависит от данных...
написано - хранить данные (FileName, Ver, Size, CRC)
т.е. строка на каждую запись, табличная структура, значит однозначно что-то типа таблицы в памяти, xml тут будет "перебор".
а вот если бы было написано "хранить структуру каталогов", т.е. данные неопределенной вложенности\структуры то я сам бы выбрал xml (ну или json, смотря на чем и для чего делал бы...)
← →
Медвежонок Пятачок © (2010-10-15 12:11) [19]ну если зависит от данных, а данные у нас по своей природе "деревянные", то xml здесь будет наиболее органично моделировать предметы реального мира (файлы)
← →
Palladin © (2010-10-15 12:12) [20]
> Ну типа я голосуя за 3 не предполагал, что эта пятница уйдет
> на бодание со всеми вами в одиночку
Ну типа не фиг тут панацею пропагандировать, а там глядишь, и бодаться не придеться.
← →
DVM © (2010-10-15 12:19) [21]
> Медвежонок Пятачок © (15.10.10 11:25) [15]
http://narod.ru/disk/26127027000/XMLvsList.zip.html
← →
sniknik © (2010-10-15 12:19) [22]> а вот если бы было написано "хранить структуру каталогов"
интереснее было бы если бы объединить т.е. "структуру каталогов с данными по файлам"...
вот тут неоднозначно, т.к. у меня например есть каталоги(логи) где по 20 тыс файлов за день... т.е. собрать все вместе в xml и он не выдержит (500 мг, уже с трудом, а гиг стандартный DOM документ уже не держит).
скорее всего бы разбил на 2, структуру в xml, а данные по файлам все таки в рекордсет, только добавил бы поле "хеш пути" по которому определял бы положение файда в каталоге.
а вот если бы нужно было хранить в базе, то преобразовал бы каталог в "дерево".
в общем все от задачи и данных зависит, а не от "крутизны технологии". может ему по задаче и стринглиста "за глаза"...
← →
sniknik © (2010-10-15 12:20) [23]> Ну типа не фиг тут панацею пропагандировать, а там глядишь, и бодаться не придеться.
+1
← →
DVM © (2010-10-15 12:21) [24]вот что вышло у меня (результаты в микросекундах), после заполнения списка происходит 1000 000 случайных обращений к его элементам.
Время сканирования: 7426958
Всего файлов: 56179
Время обращения: 31701
Время сканирования: 7383852
Всего файлов: 56178
Время обращения: 33705
Время сканирования: 7050182
Всего файлов: 56178
Время обращения: 31768
← →
QAZ (2010-10-15 12:22) [25]Удалено модератором
← →
QAZ (2010-10-15 12:30) [26]Удалено модератором
← →
DVM © (2010-10-15 12:35) [27]Удалено модератором
← →
RWolf © (2010-10-15 13:00) [28]
> Какую структуру грамотнее всего использовать для хранения
> этих данных?
Смотря как будет происходить доступ к элементам этого контейнера.
Если по имени файла, то напрашивается хэш-таблица.
← →
Медвежонок Пятачок © (2010-10-15 13:06) [29]вот что вышло у меня (результаты в микросекундах), после заполнения списка происходит 1000 000 случайных обращений к его элементам.
а вот что у меня:
создан xml c 56179 узлами
у каждого узла атрибуты name,size
size равен порядковому номеру узла.
последний узел имеет последнее значение переменной цикла (56179)
ищу не случайный, а чисто конкретный, нужный мне узел.
Причем он не в начале документа, а в конце
Разница геттиккаунтов до и после поиска = 78 мс
← →
Медвежонок Пятачок © (2010-10-15 13:10) [30]а теперь попробуй найти все файлы с именем N имеющие размер > M, которые лежат в каталогах X, но не во всех, а только в тех X, у которых родительский каталог находится в внутри папки Y, которая имеет не менее десяти файлов.
← →
sniknik © (2010-10-15 13:10) [31]DVM ©
вообще такой код выкидывается оптимизатором... т.к. переменная не используется.for i := 0 to 999999 do
begin
n := Round(Random(MaxCount));
FileInfo := FileList.Files[n];
//
end;
поставь вместо комментария что то с этой переменной, напримерif FileInfo.FileSize = -1 then begin
btnScan.Caption:= "";
break;
end;
будет более реальный результат
> меряца надо на одном компе и кагда будет ответный вариант
а код дан для чего? напишет свой, сравнит работу с этим на том же компе...
какой то не правильный Кэп, не видит очевидного...
← →
DVM © (2010-10-15 13:12) [32]
> Медвежонок Пятачок © (15.10.10 13:06) [29]
> ищу не случайный, а чисто конкретный, нужный мне узел.
Если чисто конкретный (опять же насчет критериев поиска не договорились, индекс, имя файла?), то и моя реализация может быть другой, например как в [28].
> создан xml c 56179 узлами
сколько времени ушло на создание? хорошо бы все таки объединить с моим кодом чтоб сравнить.
> Разница геттиккаунтов до и после поиска = 78 мс
т.е 78000 по моим единицам измерения.
Ты один раз ищешь или много раз?
← →
DVM © (2010-10-15 13:13) [33]
> sniknik © (15.10.10 13:10) [31]
> вообще такой код выкидывается оптимизатором... т.к. переменная
> не используется.
Я вот тоже засомневался на этот счет.
← →
Медвежонок Пятачок © (2010-10-15 13:17) [34]Если чисто конкретный (опять же насчет критериев поиска не договорились, индекс, имя файла?), то и моя реализация может быть другой, например как в [28].
Я ищу не случайный файл. Это не интересно.
Случайный - он самый первый и все. меньше микросекунды.
Я ищу чисто конкретный файл по какому-то атрибуту (по размеру или по имени например)
Причем искомый узел - он у меня заведомо самый последний в документе.
На поиск ушло 78 тиков.
сколько времени ушло на создание?
Ну всяко на порядки меньше чем само сканирование диска.
Само сканирование я делал, ибо считаем, что оно у нас одинаковое.
← →
DVM © (2010-10-15 13:20) [35]
> Медвежонок Пятачок © (15.10.10 13:10) [30]
пытаешься притянуть задачу к тем удобствам которые предоставляет XML ? :)
Я запрограммирую и это, и уверен, что моя реализация будет работать быстрее, чем средства XML, но времени я затрачу конечно больше. Но речь о конкретной задаче автора вопроса, может ему это и не надо, а может и надо.
Т.е нельзя сказать, подойдет ли тут однозначно XML или нет.
Может ему визуализировать список в TListView в виртуальном режиме надо потом, тут явно XML не к месту окажется.
← →
Медвежонок Пятачок © (2010-10-15 13:29) [36]Может ему визуализировать список в TListView в виртуальном режиме надо потом, тут явно XML не к месту окажется.
ну это еще неизвестно к месту или нет. и к месту ли листвью сам по себе (а что он собственно может показать, чего не может показать ie?)
самая простая визуализация - вызываем save и даблклик и смотрим в ie
другая визуализация: рисуем xsl (один или много всяких разных)
вызываем transformnode и получаем либо html, либо plaintext либо rtf
c цветочками и бантиками.
сама программа причем не меняется.
← →
QAZ (2010-10-15 13:33) [37]Удалено модератором
← →
И. Павел © (2010-10-15 14:03) [38]> пока не выложен переделаный на хмл код dvm - щитаем пятачка
> проспорившим
Ага. А слон (см. [12]) - на почетном третьем месте :)
← →
Anatoly Podgoretsky © (2010-10-15 14:41) [39]
> QAZ (15.10.10 13:33) [37]
А остальных вообще снимаем с соревнования, как не принявших участие. И давай его не будем считать проспорившим, просто занявшим последнее место из одного.
← →
oldman © (2010-10-15 14:44) [40]Удалено модератором
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.004 c