Разработка на Delphi
дистанционно
договорная
Разработка приложений для ПК. Разработка с нуля. Цель: разработать на Delphi 10 специализированную TSDB (Time Series Database) - базу данных, оптимизированную для наполнения, хранения и быстрого анализа временных рядов (данных, привязанных к конкретным моментам времени). Ключевые требование: • embedded TSDB; • параллельная независимая работа нескольких хранилищ (количество не ограничено); • взаимодействие – согласованное API; • единица хранения/обмена данных - запись фиксированной длинны (настраивается при создании хранилища, постоянна для всего хранилища) • высокая скорость добавления новых данных (добавляются асинхронно “в очередь” с минимальной задержкой вызывающего потока, файловые операции и прочее в отдельном потоке), новые данные добавляются только в “конец” БД; • высокая скорость выборки “сырых” данных за указанный период (синхронная операция), построение и использование некоего суррогата индекса данных по временной метке, индекс может либо хранится, либо строится “на лету” фоновым процессом, возможно как этап процедуры тестирования; • высокая скорость выборки статистических данных за указанный период на основе “сырых” данных с настраиваемой дискретностью (синхронная операция); • изменение сохраненных данных не предусмотрено; • кэширование добавляемых и получаемых данных (настраиваемый объем/размер кэша, TTL, возможность отключить); • высокая надежность хранения - выключение питания, перезагрузка ОС, повреждение жестких дисков не должны приводить к потере всех данных; • предусмотреть механизм контроля целостности данных на уровне отдельной записи, поврежденные записи игнорируются при чтении, их восстановление не предусмотрено; • реализовать механизм фонового тестирования хранилища со сбором статистики (общая + сбои) и исправлением ошибок; • срок хранения данных - настраиваемый, от 1 года, может быть изменена в процессе эксплуатации; • дискретность циклической перезапись данных - 1 день, настраиваемая; • объем хранения (оценочный) - единицы Гигабайт; • хранение данных - группа файлов с ограничением по их размеру и времени (совпадает с цикличностью перезаписи); • имена файлов данных - состоят из 2 частей (фиксированной, задаваемой при создании и переменной, числовой, заданного размера инкрементируемой), расширение настраиваемое; • иные файлы - по согласованию; • каждый файл данных имеет заголовок и раздел данных; • заголовок включает: ? минорную и мажорную версию (word 2 байта + word 2 байта = 4 байта) – могут меняться в рамках одной TSDB ? уникальный идентификатор TSDB (одинаковый для всех файлов одной TSDB) бинарное представление GUID (16 байт) ? уникальный идентификатор файла TSDB бинарное представление GUID (16 байт) ? размер данных (без учета доп полей) отдельной записи (UInt64 8 байт) ? временная метка первой записи данных (UInt64 8 байт); ? CRC16 от предшествующих полей заголовка (2 байта); • раздел данных состоит из произвольного количества записей постоянной длинны; • запись включает: ? временная метка записи данных (UInt64 8 байт) или смещение относительно временной метки первой записи, указанной в заголовке (UInt32 4 байт); ? бинарные данные (количество байт указано в заголовке) ? CRC16 от предшествующих полей записи (2 байта); • необходимо предусмотреть выравнивание раздела данных и отдельных записей по границе слова, 4 или 8 байт (по согласованию) с точки зрения повышения производительности и надежности; • должно быть обеспечено покрытие кода юнит-тестами, разработаны утилита генерации тестовых данных TSDB с задаваемыми параметрами, утилита нагрузочного тестирования производительности TSDB.
2026-05-25
Откликнуться