powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запись во множество файлов
32 сообщений из 32, показаны все 2 страниц
Запись во множество файлов
    #38653011
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите советом.
Необходимо писать данные сразу в 1000 файлов, как лучше организовать. Вот код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
for(int g=0; g<3000;g++) 
                {
                    l = g % 1000;
                    var file = new FileStream("file"+l, FileMode.Append, FileAccess.Write, FileShare.ReadWrite | FileShare.Delete | FileShare.Read | FileShare.Write);
                    Serializer.Serialize(file1, aa);
                    file.Close();
                }


В каждом цикле открывает файл, записывает и закрывает и это все будет крутится в бесконечном цикле.
Мой вариант считаю не верным т.к. приходится постоянно открывать и закрывать файл, можно ли иначе?
Притом, что в другом потоке могут эти файлы считывать.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653057
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как можно записать в файл не открыв его? Делайте запрет на чтение/запись если файл используется и ждите пока "освободится"
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653058
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
База данных, например?

Вообще, не хватает информация. Что за данные пишутся, кто пишет, кто читает, как долго читает...
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653076
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НахлобучБаза данных, например?

Вообще, не хватает информация. Что за данные пишутся, кто пишет, кто читает, как долго читает...
Как раз пишу логику в замен базы данных, чтоб оптимизировать ресурсы.
Данные это показания с промышленных датчиков, 1000 уникальных датчиков с дискретностью 500ms, под каждый датчик файл. Читает эти файлы другой поток.
Сейчас придумал кое что, держу массив с открытыми файлами.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
FileStream[] f= new FileStream[1000];
                for(int g=0; g<3000;g++) 
                {
                    l = g % 1000;
                    if(f[l]==null)
                        f[l]= new FileStream("file"+l, FileMode.Append, FileAccess.Write, FileShare.ReadWrite | FileShare.Delete | FileShare.Read | FileShare.Write);
                    Serializer.Serialize(f[l], aa);
                    f[l].Flush();
                }


Уже лучше 600 мс, нов се равно много.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653081
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это какое то безумие, Вы что желаете, из одного потока передать данные на обработку в другой поток?
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653091
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarКак раз пишу логику в замен базы данных, чтоб оптимизировать ресурсы.
Тогда прямая дорога в RabbitMQ, например.

Поставщик заталкивает данные в очередь, а потребители (один или несколько) из нее читают и обрабатывают.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653095
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarНахлобучБаза данных, например?

Вообще, не хватает информация. Что за данные пишутся, кто пишет, кто читает, как долго читает...
Как раз пишу логику в замен базы данных, чтоб оптимизировать ресурсы.
Данные это показания с промышленных датчиков, 1000 уникальных датчиков с дискретностью 500ms, под каждый датчик файл. Читает эти файлы другой поток.
Сейчас придумал кое что, держу массив с открытыми файлами.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
FileStream[] f= new FileStream[1000];
                for(int g=0; g<3000;g++) 
                {
                    l = g % 1000;
                    if(f[l]==null)
                        f[l]= new FileStream("file"+l, FileMode.Append, FileAccess.Write, FileShare.ReadWrite | FileShare.Delete | FileShare.Read | FileShare.Write);
                    Serializer.Serialize(f[l], aa);
                    f[l].Flush();
                }



Уже лучше 600 мс, нов се равно много.
А писать данные с каждого датчика в отдельный файл - это наилучший вариант?
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653123
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belavik, Да, таким образом я файл размещаю в смысловые директории и таки образом экономлю 12 байт с каждой записи...Если все в один писать, то тогда лучше все разместить в БД только размер данных уже получится в 2 раза больше...
а это > 5 миллиардов записей в месяц, 116 Гигабайт в месяц или 57 Гигабайт...
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653129
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиЭто какое то безумие, Вы что желаете, из одного потока передать данные на обработку в другой поток?
Один поток пишет файлы, архивирует. Другой поток или потоки читают эти файлы (запросы пользователей).
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653131
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarBelavik, Да, таким образом я файл размещаю в смысловые директории и таки образом экономлю 12 байт с каждой записи...Если все в один писать, то тогда лучше все разместить в БД только размер данных уже получится в 2 раза больше...
а это > 5 миллиардов записей в месяц, 116 Гигабайт в месяц или 57 Гигабайт...
И все эти данные всегда должны быть доступны для чтения, или какая-то часть становится неактуальной, устаревает? Какой средний размер файла?
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653133
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нахлобуч, почитаю, чет не слышал о этой платформы.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653148
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BelavikldarBelavik, Да, таким образом я файл размещаю в смысловые директории и таки образом экономлю 12 байт с каждой записи...Если все в один писать, то тогда лучше все разместить в БД только размер данных уже получится в 2 раза больше...
а это > 5 миллиардов записей в месяц, 116 Гигабайт в месяц или 57 Гигабайт...
И все эти данные всегда должны быть доступны для чтения, или какая-то часть становится неактуальной, устаревает? Какой средний размер файла?
Файлы еще делятся по времени, по суткам, каждый файл ~2 метра
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653153
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarBelavik, Да, таким образом я файл размещаю в смысловые директории и таки образом экономлю 12 байт с каждой записи...Если все в один писать, то тогда лучше все разместить в БД только размер данных уже получится в 2 раза больше...
а это > 5 миллиардов записей в месяц, 116 Гигабайт в месяц или 57 Гигабайт...
это кто так поставил задачу? старший?
имхо, зачем вам вся история с такой дискретностью? кто ее будет читать?
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653176
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarНахлобуч, почитаю, чет не слышал о этой платформы.
Заодно почитай как устроен Graphite и Whisper . Хранить прошлогодние данные с точностью до секунды вряд ли надо.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653191
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarа это > 5 миллиардов записей в месяц, 116 Гигабайт в месяц или 57 Гигабайт...

Отслеживать последнее записанное в БД значение датчика, и если новое значение превысило некий порог, то записать его
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653234
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я мысленно представил себе ( время стремится в бесконечность)
Россия встала с колен, люди освоили Марс, половина России покрыта сплошными датацентрами, все так же крутятся
эти 1000 датчиков и пишут в файлы, только размеры файлов уже под тысячи петабайтов, половина россиян обслуживаю эти центры
в которых размещаются эти файлы, эта задача ( запись в файл) дала импульс энергетике появилось много атомных и гидро электростанций для питания этих центров, остальная половина качает нефть, что бы ее продать а на вырученные деньги построить новые центры...
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653235
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиldarBelavik, Да, таким образом я файл размещаю в смысловые директории и таки образом экономлю 12 байт с каждой записи...Если все в один писать, то тогда лучше все разместить в БД только размер данных уже получится в 2 раза больше...
а это > 5 миллиардов записей в месяц, 116 Гигабайт в месяц или 57 Гигабайт...
это кто так поставил задачу? старший?
имхо, зачем вам вся история с такой дискретностью? кто ее будет читать?
Для анализа дынных, нужно около 6 месяцев хранить. Некоторые возможно и не понадобятся.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653242
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиЯ мысленно представил себе ( время стремится в бесконечность)
Россия встала с колен, люди освоили Марс, половина России покрыта сплошными датацентрами, все так же крутятся
эти 1000 датчиков и пишут в файлы, только размеры файлов уже под тысячи петабайтов, половина россиян обслуживаю эти центры
в которых размещаются эти файлы, эта задача ( запись в файл) дала импульс энергетике появилось много атомных и гидро электростанций для питания этих центров, остальная половина качает нефть, что бы ее продать а на вырученные деньги построить новые центры...
Фантазия конечно на высшем уровне. Если брать СКАДА системы, то все они хранят сырые данные и даже с меньшей дискретностью.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653245
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallarisldarа это > 5 миллиардов записей в месяц, 116 Гигабайт в месяц или 57 Гигабайт...

Отслеживать последнее записанное в БД значение датчика, и если новое значение превысило некий порог, то записать его
Кстати тоже обдумываю этот вариант. А есть еще методы по сжатию?
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653249
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarКстати тоже обдумываю этот вариант. А есть еще методы по сжатию?

В течении минуты вычислять среднее значение и записывать его в конце минуты, например
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653261
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldar,
биржевые данные, минимальная единица - тик.
Но зачем хранить данные с датчиков? так часто.
достаточно и раз в минуту или пять минут
если рассматривать с точки зрения аварийности, должны быть критерии аварийности данных и писать только
при их наличии, другой вопрос срезы по данным - как говорит П. - замаетесь пыль глотать бегая по файлам выколупывая значения..
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653293
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarКстати тоже обдумываю этот вариант. А есть еще методы по сжатию?Run-Length Encoding.

Но вообще -- очередь и даунсамплинг/агрегирование данных.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653303
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,
Для большинства задач вы правы, но иногда, это в редко конечно нужны именно с маленькой дискретностью, к примеру отслеживать скачки вибрации или ток с напряжением.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653312
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarГде-то в степи,
Для большинства задач вы правы, но иногда, это в редко конечно нужны именно с маленькой дискретностью, к примеру отслеживать скачки вибрации или ток с напряжением.
Вы себе как это представляете - отследить вибрацию за последний месяц.
Обычно с малой дискретностью - на малых периодах, или на периодах с экстремальными величинами ( аварийная ситуация)
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653324
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,
Вы правы, за месяц не нужно просматривать, а только за определенные периоды.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653325
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нахлобуч, интересно конечно, надо подумать.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653664
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиНо зачем хранить данные с датчиков? так часто.

Это данные с датчиков БАК! Реже нельзя, бозон Хиггса не поймаем!
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653719
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВГде-то в степиНо зачем хранить данные с датчиков? так часто.

Это данные с датчиков БАК! Реже нельзя, бозон Хиггса не поймаем!
А, так вот почему скорость света как бы превысили.... Гарбадж коллектор в этот момент подметать начал....
:-)
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653742
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarНахлобучБаза данных, например?

Вообще, не хватает информация. Что за данные пишутся, кто пишет, кто читает, как долго читает...
Как раз пишу логику в замен базы данных, чтоб оптимизировать ресурсы.
Данные это показания с промышленных датчиков, 1000 уникальных датчиков с дискретностью 500ms, под каждый датчик файл. Читает эти файлы другой поток.
Сейчас придумал кое что, держу массив с открытыми файлами.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
FileStream[] f= new FileStream[1000];
                for(int g=0; g<3000;g++) 
                {
                    l = g % 1000;
                    if(f[l]==null)
                        f[l]= new FileStream("file"+l, FileMode.Append, FileAccess.Write, FileShare.ReadWrite | FileShare.Delete | FileShare.Read | FileShare.Write);
                    Serializer.Serialize(f[l], aa);
                    f[l].Flush();
                }



Уже лучше 600 мс, нов се равно много.

1) Зачем вам сериализация? Напрямую массивы не записать?
2) Где Dispose FileStream?
3) Если диск один - параллелизация записи вам не поможет, только последовательный перебор
4) Я не понял, в каждый файл данные дописываются или перезаписываются? По коду - перезаписывается.
5) Рассмотрите вопрос о Shared Memory.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653845
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВГде-то в степиНо зачем хранить данные с датчиков? так часто.

Это данные с датчиков БАК! Реже нельзя, бозон Хиггса не поймаем!
:)
500мс еще ладно, на одном форуме АСУТП кто то интересовался чтоб архивировать с дискретностью 1 мс.

На а на продакшене скорей всего дискретность 500мс будет не у всех тегов, будет подбираться индивидуально по назначению, просто прорабатываю под максимальную нагрузку.
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653846
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,
переписал под BinaryWrite время стало 30 мс, это уже гуд.
Где вы увидели что перезаписывается? А FileMode.Append?
...
Рейтинг: 0 / 0
Запись во множество файлов
    #38653868
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarГде вы увидели что перезаписывается? А FileMode.Append?
Да, точно, не обратил внимание. Но все равно, рассмотрите возможность использования Shared Memory, если 30 мс не до конца устроят.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запись во множество файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]