Я недавно начал работать с Elasticsearch и в настоящее время сохраняю некоторые данные в нем с помощью Spring Data Elasticsearch.
Я относительно новичок в базах данных NoSQL.
Iхочу узнать, как лучше всего смоделировать журнал аудита для пользователя.
В настоящее время я вижу два подхода.
Первый - создать один документ для каждой записи журнала.
Что-то похожее на это
@Document(indexName = "user_audit_log", type = "UserAuditLog")
public class UserAuditLog {
@Id
private String uuid;
private Long userID;
private String action;
private String original;
private String newValue;
private OffsetDateTime timestamp;
}
И записать записи аналогичным образом в СУБД.Основное преимущество, которое я вижу в этом подходе, заключается в том, что нет необходимости беспокоиться о параллельности записи.
Второй подход - иметь один документ на пользователя.И записи журнала должны быть помещены в список внутри там.
Что-то похожее на это.
public class UserAuditLogEntry {
private String action;
private String original;
private String newValue;
private OffsetDateTime timestamp;
}
@Document(indexName = "user_audit_log", type = "UserAuditLog")
public class UserAuditLog {
@Id
private Long userID;
private List<UserAuditLogEntry> auditLogEntries;
}
Документ должен быть загружен, а коллекция auditLogEntries
должна быть обновлена, ився модель должна быть сохранена снова.
Главный недостаток, о котором я могу подумать, - это необходимость одновременной защиты от записи.
Какая из них является наилучшей практикой вasticsearch?