На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Хранение данных при непрерывно измерении
    Пишу программу для мониторинга параметров процесса. Программа будет работать практически постоянно, измерения записываются через постоянный временной интервал (~5 сек). Она должна сохранять измерения в файл; пользователь выбирает временной интервал, и данные за этот промежуток отображаются на графике. Как лучше организовать хранение данных? Сохранять файлы с именем-врямя начала записи, и потом перебирать ихи и открывать нужные, или лучше как-нибудь по другому?
    Сообщение отредактировано: Tatiana -
      много маленьких файлов - это хуже(медленнее), чем мало, но больших...

      поэтому советую кидать всю информацию в один файл, и уже организовывать поиск по файлу.
      тем более, что записи у тебя скорее всего фиксированной длины будут, поэтому просто к каждой записи добавляй переменную-отметку времени...

      кроме того, записи в файле уже будут отсортированы по времени, поэтому поиск будет осуществляться в несколько раз быстрее... можно даже пользоваться прямым доступом к файлу для захвата нескольких записей, если знаешь смещение каждой записи.
        Тоже думаю про бд, но как лучше ее организовать? Будет ли толк, если сделать 2 поля-"время начала" и "имя файла"? А какой максимальный размер файла, чтобы не было с ним проблем?
          Tatiana, я пользовался именно таким способом, который предложил shipbrother - отлично работает. Данные сохранялись в файле в текстовом формате в виде таблицы, в первую колонку прописывалось время\дата в формате DOS (целое 32 разряда) и использовалось как ключ для поиска данных в заданном временном интервале. Также хранилась расшифрованная дата для удобства просмотра данных.

          Lucifer, а стоит ли городить такой сложный огород? (хотя опять же зависит от того, как и где потом эти данные будут использоваться, но это стоит уточнить у Tatianы. ;)
          Сообщение отредактировано: exodus -
            И все-таки, если данные будут год накапливаться, а измерения - каждые 5 сек, не слишком ли большой будет файл?
              Цитата

              И все-таки, если данные будут год накапливаться, а измерения - каждые 5 сек, не слишком ли большой будет файл?
              Tatiana, за год накопиться 6307200 записей. Каждая запись будет предположим по 100 байт (просто для примера), итого за год файл будет 601 мегабайт.
              В случае использования БД объем БД будет не меньше, а может даже чуть-чуть больше (за счет генерации индекса). С точки зрения объема - все равно. Но в БД все данные будут храниться в 1 файле, а при использовании файлов ты можешь сделать по файлу на каждый месяц (итого каждый файл по 50 мегабайт и это ускорит работу с ними)

              С точки зрения скорости добавления записей и чтения записей: в случае использования БД при добавления новой записи будет перестраиваться гигантский индекс (это тоже занимает время), в случае использования файла - тебе просто надо будет записать данные в конец. В случае чтения - думаю разницы в скорости практически никакой.

              Если подходить к задаче серьезно, то я бы на твоем месте проверил за какое время ты сможешь добавить и считать миллион записей, используя файлы и используя БД.

              Цитата
              Я что дятел руками в файле время искать? Пусть компьютер работает. Он железный
              все зависит от результата... может быть как дятел работать получится быстрее...

              вообщем принимая во внимание эти рассуждения я бы провел эксперимент. С другой стороны - решать тебе насколько качественно и быстро должна быть написана программа.

              Добавлено
              насчет структуры БД - не "время начала" и "имя файла" - в этом смысла нет никакого, а если уж этот вариант, то "время начала" и "данные измерения"

              Если ты будешь строить график чаще за месяц или за неделю например, то стоит организовать таблицу в БД или отдельный файл для записи суммарной информации, чтобы каждый раз все подряд не пересчитывать
                А какую БД посоветуете?
                  Я бы посоветовал объединить оба метода. Программа записывает данные в файл, а какой-нить демон неспешно заносит из файла в бд.
                    Цитата Tatiana @
                    Пишу программу для мониторинга параметров процесса

                    Ух ты блин, сейчас тоже работаю над подобным проектом. Данные хранятся на SQL сервере, на данный момент мониторятся два канала измерения, частота измерений ~1 сек, размер файла БД - фиксированный ~15Гб, без проблем хранятся данные за два года. Планируется увеличение числа каналов до 18.

                    Насчет скорости - с точки зрения клиента добавляющего данные, они (данные) добавляются мгновенно - т.е. можно считать что данные попадают в таблицу сразу после запроса на добавление. Результаты измерения за сутки (около 150000 строк) выдергиваются запросом за 5-7 сек. Вполне удовлетворительно...

                    Насчет структуры таблицы - если отбросить все лишнее и оставить только необходимое, то останется только поле "Дата" (ключевое индексированное) и "РезлтИзм". В поле "Дата" момент времени сохраняется с точностью до нескольких милисекунд (не помню уже сколько точно..)

                    Цитата Tatiana @
                    А какую БД посоветуете?

                    SQL Server... очень рекомендую... :yes:
                      Если мониторинг и обработка сосредоточены на одном рабочем месте, и в дальнейшем число мест увеличивать не предполагается (сегодня не предполагается, а завтра начальство решит, что надо создать новый аналитический отдел, который будет заниматься анализом прочитанной информации) то иногда выгоднее вариант с файлами, не намного (быстрее можно организовать доступ, но сложности с сопровождением данных, к тому же трудно поменять формат данных, добавить поле, например).
                      Если машин хотя бы две, то вариант с сервером БД становится предпочтительнее, так как избавляет от многих хлопот, связанных с записью/чтением данных.
                        Цитата Lucifer @
                        Я что дятел руками в файле время искать? Пусть компьютер работает. Он железный

                        Знаешь, компьютер на то и создан, чтобы обрабатывать всякие данные, в том числе сохранённые в виде файла. Я предложил текстовый формат файла в качестве примера (база данных, к твоему сведению, тоже файл, просто другого формата). Обрати внимае, что файл сразу индексирован (читай внимательнее) и поиск по нему и дальнейшее отображение найденной инфы производится очень легко. Надо разумно подходить к решению вопроса, БД - не панацея.

                        Tatiana, по поводу базы данных подумай. База данных имеет смысл, если тебе нужно сортировать данные по разным параметрам, ровно как делать выборку данных по разным параметрам, либо искать связи между параметрами или их группой.

                        А для линейного (по времени в твоём случае) поиска данных такое усложнение неоправдано, как заметил shipbrother.
                        Также он прав с разбиением всего файла данных на части по неделям или месяцам (по дням будет слишком мелко, хотя если данные будут обрабатываться автоматом, то 365 файлов поименованных датой - не велико количество).
                          exodus :yes:
                          Tatiana, надо взвесить все "за" и "против".
                          По разумному, БД используется тогда, когда есть сущности и связи между сущностями... СУБД для этого и пишутся. В ином случае выйгрыш невелик (если вообще есть)
                          Сообщение отредактировано: shipbrother -
                            Для визуализации результатов, рекомендую использовать Statistica v6. Работает с файлами в различных форматах (txt, cvs, ...), легко позволяет импортировать данные из СУБД (лишь бы драйвера соотвествующих БД были бы установлены) используюя SQL запрос. Форм представления результов -- графики, последовательности, гистограммы и т.п.несколько десятков. Широчайший набор встроенных программ обработки данных, для особо изощренных требоваваний встоенный язык программирования, позволяющщий получить доступ до каждого элемента данных.
                              Lucifer, скорее Oracle, раз такие объёмы данных.
                                какие базы?? :blink: вы же предлагаете реляционные базы данных, где смысл в связях между таблицами!!

                                У Татьяны одна таблица в два поля!! Файл и только файл. Поля в бинарном виде фиксированной ширины, без разделительных символов. Один файл на день, или один файл на месяц.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0344 ]   [ 15 queries used ]   [ Generated: 25.04.24, 11:33 GMT ]