В настоящий момент я работаю над проектом, у которого есть довольно необычное требование, и я надеюсь получить некоторые советы о том, как его можно обработать, или даже некоторые указатели на информацию, которые могут помочь мне построить решение.
Итак, вот что мне нужно сделать. Приложение хранит и управляет различными типами медиафайлов, но каждое развертывание приложения имеет совершенно разные требования к метаданным для медиафайлов.
Эти метаданные могут содержать произвольное количество полей разных типов (однострочный текст, многострочный текст, флажки, выбранные значения и т.д.), а также часто требуют проверки, в частности, проверки присутствия и уникальности.
Приложение должно иметь возможность легко извлекать значения, а наиболее важно должен иметь возможность обрабатывать полные возможности поиска в этих полях.
Один из вариантов, который я рассмотрел, - это использование структуры списка свойств, в которой таблица базы данных просто содержит имя и значение свойства для каждого поля метаданных каждого медиафайла. Однако при прототипировании этого решения быстро стало очевидно, что он просто не будет достаточно эффективным для поиска и поиска записей, особенно когда база данных может быть достаточно большой, например. в недавнем развертывании было 3000 мультимедийных файлов, и было более 20 полей метаданных. Кроме того, запросы на поиск и извлечение соответствующих записей быстро стали очень сложными.
Другой вариант, который используется в настоящее время системой, заключается в том, что конфигурация метаданных определена заранее, и миграция выполняется во время развертывания для создания таблицы и модели со стандартным именем, чтобы связать с ней модель мультимедиа, с которой система затем использует. Это обычно работает очень хорошо, но это вызывает некоторые значительные проблемы с развертыванием и тестированием.
Например, тесты с модулем записи становятся намного более сложными, если вы не знаете конфигурацию до развертывания. Хотя я мог бы написать образец конфигурации и протестировать код таким образом, он не позволит мне проверить конкретные требования конкретного развертывания.
Аналогично, в разработке в настоящее время мне нужно скопировать перенос из конфигурации в основную папку, запустить ее, выполнить все мои тесты и разработки, а затем я должен помнить о откате и удалении этой миграции из основной папки так что приложение находится в стандартном состоянии. Это особенно сложно, когда я исправляю ошибку, и мне нужно, чтобы приложение было настроено в определенной конфигурации для тестирования и отладки. Попытка переключаться между различными конфигурациями становится настоящим кошмаром.
В идеале я хотел бы иметь возможность динамически создавать таблицу и модель, включая проверки и т.д. из файла конфигурации при запуске сервера. Еще лучше было бы, если бы я мог поддерживать несколько настроек метаданных в одной базе данных, каждая из которых имеет свою собственную таблицу, поэтому все, что мне нужно сделать для переключения между ними, это изменение того конфигурационного файла, который в настоящее время используется в приложении.
Я уверен, что это можно сделать с помощью Rails, но есть очень мало информации, которую я смог найти, которая может указать мне в правильном направлении, как ее построить во время моих исследований за последние несколько дней, чтобы любой помощь или предложения были бы высоко оценены!