Лучшая конфигурация Spring/Быть в спящем режиме для никогда пеленальных столов

Насколько я понимаю, вы не знаете, что такое ключи и значения, но хотите преобразовать их в строки?

Может быть, это может сработать:

public static void MyMethod(object obj)
{
  var iDict = obj as IDictionary;
  if (iDict != null)
  {
    var dictStrStr = iDict.Cast<DictionaryEntry>()
      .ToDictionary(de => de.Key.ToString(), de => de.Value.ToString());

    // use your dictStrStr        
  }
  else
  {
    // My object is not an IDictionary
  }
}
6
задан Il-Bhima 26 May 2009 в 22:12
поделиться

5 ответов

Настройте cahce второго уровня для всех сущностей (проверьте документацию по спящему режиму для различных деталей конфигурации / сопоставления для кеширования), настройте кеш запросов и отметьте их как неизменяемые в сопоставлении / использовании сеансов только для чтения, это заставит спящий режим не проверять наличие модификаций для этих объектов при выполнении "отложенной записи транзакций" и сброса сеанса.

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

2
ответ дан 17 December 2019 в 07:08
поделиться

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

Тем не менее, если ваши таблицы особенно велики, вы можете рассмотреть другой метод разыменования данных, которые они содержат; если данные таблицы велики и действительно никогда не меняются, вы можете рассмотреть другой способ заполнения дерева объектов, отличный от Hibernate;

2
ответ дан 17 December 2019 в 07:08
поделиться

По моему опыту, такие таблицы необходимо удалить из базы данных и преобразовать в перечисления или что-то в этом роде. Не из-за производительности, а из-за ремонтопригодности. Вы не поверите, но изменение кода (опять же, по моему опыту) более простая и шаблонная операция, чем написание сценариев для изменения данных в производственной базе данных. Особенно, если вы не обязательно сами управляете базой данных; вдвойне, особенно если ваша компания даже не контролирует это.

-2
ответ дан 17 December 2019 в 07:08
поделиться

Я считаю, что транзакции только для чтения являются оптимизацией гибернации. Если Hibernate знает, что ему не нужно будет выяснять, изменили ли вы что-нибудь в объектах, он может отказаться от нескольких шагов (модификация классов CGLib?)

1
ответ дан 17 December 2019 в 07:08
поделиться

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

Вы можете посмотреть на различные уровни изоляции и эффекты каждого из них в весенней документации javadocs ( http://docs.huihoo.com/javadoc/spring/2.5 /org/springframework/transaction/annotation/Isolation.html

Это максимально освободит блокировки строк и обеспечит максимальную производительность, по крайней мере, в том, что касается блокировки.

1
ответ дан 17 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: