Преимущество производительности MySQL Enum?

Когда мы посмотрим, как реализованы JacksonEncoder и JacksonDecoder , мы заметим, что они создают новые ObjectMapper в конструкторе:

public JacksonDecoder(Iterable modules) {
  this(new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
      .registerModules(modules));
}

[1115 ] Выше конструктор вызывается по умолчанию с помощью emptyList(). Итак, нам нужно предоставить все модули, которые мы хотим использовать вручную.

Для получения максимальной отдачи от Java 8 и Jackson зарегистрируйте все 3 модуля из jackson-modules-java8 :

private val client = Feign.builder()
    .encoder(JacksonEncoder(Arrays.asList(JavaTimeModule(), ...)))
    .decoder(JacksonDecoder(Arrays.asList(JavaTimeModule(), ...)))
    .target(Client::class.java, host)

РЕДАКТИРОВАТЬ [1113 ]
Ther - конструктор, позволяющий использовать ObjectMapper экземпляр. Вы можете создать новый экземпляр или добавить его из своего контейнера:

val mapper = ObjectMapper()
mapper.registerModule(ParameterNamesModule())
   .registerModule(Jdk8Module())
   .registerModule(JavaTimeModule())
// other configuration

val client = Feign.builder()
    .encoder(JacksonEncoder(mapper))
    .decoder(JacksonDecoder(mapper))
    .target(Client::class.java, host)

50
задан Bill Karwin 4 November 2011 в 05:40
поделиться

3 ответа

Существует огромный штраф производительности за использование ENUM для таких операций as:

  • Запросить список разрешенных значений в ENUM , например, для заполнения раскрывающегося меню. Вы должны запросить тип данных из INFORMATION_SCHEMA и проанализировать список из возвращенного поля BLOB.

  • Измените набор допустимых значений. Для этого требуется оператор ALTER TABLE , который блокирует таблицу и может выполнить реструктуризацию.

Я не фанат ENUM MySQL . Я предпочитаю использовать таблицы поиска. См. Также мой ответ на « Как обрабатывать перечисления без полей перечисления в базе данных? »

45
ответ дан 7 November 2019 в 10:59
поделиться

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

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

24
ответ дан 7 November 2019 в 10:59
поделиться

Нет, см. Сравнение здесь

Преимущество заключается в удобочитаемости кода.

1
ответ дан 7 November 2019 в 10:59
поделиться
Другие вопросы по тегам:

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