Что кэшироваться, когда 99,9% Ваших данных часто изменяется?

Вы можете сделать это с помощью одного итератора, таким образом:

Iterator<PointAG> it = points.iterator();
if (it.hasNext()) {
  PointAG prev = it.next();
  while (it.hasNext()) {
    PointAG next = it.next();
    sections.add(new LineSection(prev, next));
    prev = next;
  }
}

Вы можете написать тело цикла без каких-либо дополнительных переменных:

  while (it.hasNext()) {
    sections.add(new LineSection(prev, prev = it.next()));
  }

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

Выполнение этого с помощью итератора будет более эффективным, чем индексирование для реализаций списков, не относящихся к RandomAccess, например LinkedList.

8
задан BlaM 23 October 2008 в 08:18
поделиться

5 ответов

Я предполагаю, это не действительно 99,9% всех данных, которые изменяются, но именно в 99,9% всех местоположений данных изменяется, происходят.

Например, при выполнении доски объявлений которая означает, что будет непрекращающийся поток новых сообщений, но старые сообщения останутся тем же, и даже старые потоки останутся неизменными в течение долгого, долгого времени.

В этом случае Вам будет нужен способ делать недействительным старые кэшированные данные, так, чтобы можно было создать кэш, как только поток (в примере) просматривается. Если существует изменение в ОДНОМ из этих потоков (т.е. когда кто-то добавляет новое сообщение), этот кэшируемый элемент удален/отмечен устаревший, таким образом, в следующий раз это просматривается, это будет восстановлено. Другие объекты, которые все еще не изменились, будут использовать кэш, все же.

7
ответ дан 5 December 2019 в 15:28
поделиться

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

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

2
ответ дан 5 December 2019 в 15:28
поделиться

Это зависит.

Если Вы готовы принести ту жертву (т.е. вещи вернулись к реальности плохие, мудрые производительностью), Вы могли бы хотеть полагать, что кэширование данных для маленьких интервалов (10 secs, 30 secs, 1 минута...) уменьшает нагрузку на Вашу базу данных. Данные не будут самыми новыми, но это может просто быть достаточно ново.

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

1
ответ дан 5 December 2019 в 15:28
поделиться

Действительно соответствующее соображение состоит в том, как часто это, которое изменяет 99,9% информации, является это каждым доступом, каждую секунду, минута, час? Что-либо выше доступа, в зависимости от суммы запросов на единицу измерения времени, которую Вы имеете и кэширующаяся схема, которую Вы выбираете, могло бы иметь смысл.

Пока среднее время извлечения уменьшается, кэш. Необходимо измерить это и решить.

Некоторые методы проверки кэша состоят в том, чтобы проверить законность на доступ или сохранить метку времени и истечение с кэшем. Проверьте, что законность на каждый доступ является более дорогой, и timestamp+expiry мог бы служить устаревшему содержанию в некоторых случаях.

1
ответ дан 5 December 2019 в 15:28
поделиться

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

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

Обратите внимание, что это не работало бы хорошо на сценарии масштаба предприятия.

0
ответ дан 5 December 2019 в 15:28
поделиться
Другие вопросы по тегам:

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