Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.09;
Скачать: CL | DM;

Вниз

Выбор структуры для хранения данных   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.008 c
2-1287351196
Германн
2010-10-18 01:33
2011.01.09
Caption на кнопках ToolBar


2-1286992785
Fantomas_RUS
2010-10-13 21:59
2011.01.09
Dll важный вопрос


4-1243692161
Nikfel
2009-05-30 18:02
2011.01.09
Замена ресурсов из файлов?


2-1287365172
DimonS
2010-10-18 05:26
2011.01.09
Обновляемый запрос в старой программе.


6-1233258365
LOLUIII/E
2009-01-29 22:46
2011.01.09
Сокеты вопрос!!!