Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1285341534
stas
2010-09-24 19:18
2011.01.09
воспроизведение файла m2ts


3-1251053802
Maks Zyuzin
2009-08-23 22:56
2011.01.09
IBDataSet и сбрасывание значений параметров


11-1197381407
Elec3C
2007-12-11 16:56
2011.01.09
Запись и чтение в/из файл(-а)


15-1285527911
student92_
2010-09-26 23:05
2011.01.09
Формулировка текста задания.


2-1286938887
Василич
2010-10-13 07:01
2011.01.09
Русские буквы в Debug/Local Variables





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский