Лучший способ сохранить динамические данные конфигурации веб-страницы в asp.net

1

У нас есть настраиваемое веб-приложение asp.net. Различные группы (100+) могут войти в приложение. Для каждой группы у нас есть настраиваемый XML файл с информацией о том, как отображать страницу. Когда пользователь входит в систему, на основе идентификатора группы и параметров конфигурации в XML файле отображается веб-страница.

Например: Group1.xml

<Group1>
 <item key="Shape" value="True" />
 <item key="Color" value="False" />
 <item key="Submit" value="False" />
<Group1>

Group2.xml

<Group2>
 <item key="Shape" value="True" />
 <item key="Color" value="True" />
 <item key="Submit" value="True" />
<Group2>

В приведенном выше примере форма и цвет представляют собой текстовые поля, а Submit - кнопка. На основе значений (True или False) мы либо отображаем текстовое поле, либо скрываем текстовое поле, тем самым динамически отображая веб-страницу.

Сохранение данных этого типа в файле xml в папке app_data работало очень хорошо. Но по мере того, как мы добавляем на каждую страницу больше групп и больше элементов, управление каждым XML файлом гарантирует, что каждый xml файл имеет одинаковые элементы и правильные значения становится сложным (есть тысячи элементов и 50+ веб-страницы).

Мы попытались сохранить эти данные в таблице в базе данных. Но так много запросов к базам данных для чтения значений по одному стоит дорого, а производительность страницы уменьшается.

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

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

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

Теги:

1 ответ

0
Лучший ответ

Обычно я буду выступать за решение, основанное на базе данных, однако, похоже, что у вас уже есть система, которая хорошо работает для вас и доказана, поэтому пока не бросайте ее. Если я правильно прочитаю ваш вопрос, ваши текущие настройки, управляемые xml, будут работать хорошо, и решение масштабируется нормально.

Ваша проблема связана не столько с производительностью или точностью выполнения, но и с этим не меняйте.

Скорее, это то, как вы управляете этими XML файлами. Несколько быстрых вопросов:

Это одно приложение с 50 или около того страниц, а не множество приложений? У каждой группы одинаковые настройки, только разные значения?

Если ответом на оба этих вопроса является "да", вы должны попробовать ConfigGen. Он был разработан для создания конкретных файлов app.config и web.config, но его можно было легко использовать для создания любого файла настроек.

Способ его работы заключается в том, что у вас есть один символизированный xml-шаблон.

<?xml version="1.0" encoding="utf-8"?>
<group name="[%groupName%]">
   <item key="Shape" value="[%shape%]" />
   <item key="Color" value="[%color%]" />
   <item key="Submit" value="[%submit%]" />
</group>

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

MachineName    ConfigFilePath    groupName    shape    color    submit
Default        default.xml       defaultgroup True     True     True
Group1         Group1.xml        Group1       True     False    False 
Group2         Group2.xml        Group2       True     True     True     

Во время сборки (не во время выполнения) configGen использует два файла для генерации выходного конфигурационного файла для каждой группы.

Это упрощает управление настройками для каждой группы, и вам не придется менять одну строку кода приложения. В excel очень просто посмотреть вниз по столбцу и проверить настройки в одном месте. Я лично предпочитаю использовать файл csv, потому что он лучше объединяется в системах управления версиями.

Надеюсь, это поможет.

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

Прочитайте кеширование с чтением.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню