Хранение поискового JSon в MySql

У меня есть следующая таблица:

id | notification_id | user_id | metadata | created_at | modified_at
--------------------------------------------------------------------
 | | | | |

метаданные поля содержат объект json, такой как:

{"transferId":100010003,
 "timestamp":1401778800000,
 "amount":1150,
 "customerTimestamp":1401778800000,
 "customerFullName":"John cusack",
 "customerMsisdn":460100000003,
 "customerMessage":"Test payment3",
 "assignee":Bob,
 "comments":this is a comment,
 "currency":"SEK",
 "balanced":false,
 "inboxNotificationId":0}

Вышеупомянутый json доступен для поиска. Значение может быть запросом для метаданных транзакции, где customerName = john cusack и user_id = 1234.

Я полностью понимаю, что это очень плохой дизайн. НИКОГДА не храните json-объект в СУБД, если он подвержен изменениям или будет выполняться поиск.

Я хочу оптимизировать схему, чтобы при запросе данных мне не потребовалось много времени, чтобы вернуть мне результаты (которые в настоящее время занимают много времени). Для этого я могу представить три варианта:

  • Разбейте объект json и сохраните поля в отдельных столбцах и проиндексируйте их.
  • Используйте NoSql DB, как MongoDB для хранения json
  • Использовать solr

Какой из них наиболее логичен и выгоден? все они? Может кто-то, пожалуйста, особо посоветовать о solr (так как я не знаю, как это работает), почему я должен или не должен его использовать?

Ура !!

1 ответ

Вы определенно хотите поместить JSON в отдельные поля. У вас есть разные типы (строки, булевы, числа и т.д.), И вы хотите, чтобы они обрабатывались отдельно. Тогда вы можете решить, что вы делаете, но вы, безусловно, можете использовать Solr для такого рода вещей.

licensed under cc by-sa 3.0 with attribution.