我目前正在使用PostgreSQL數據庫,Spring和Hibernate。我有一個表的屬性correlation_id是唯一的。每次在我首先添加一個新元素之前,我必須檢查任何具有新的correlation_id的項目是否已經存在於數據庫中。在數據庫和內存中搜索數據時的性能
對於這種情況,我已經實現了遞歸函數,它將生成一個新的correlation_id並檢查它是否存在或不在db中。這意味着這個函數每次都會調用db,所以有時候可能只是一次調用,但有時我可能會是五次,十次甚至更多。這個例子在示例一中顯示。
例1:
private String generateId() {
String myId = StaticFunction.generateMyId();
MyMessages doesExist = MyServiceDaoImpl.checkDoesItExistInDB(myId);
if(doesExist != null) {
generateId();
}
return myId;
}
在第二個例子,我想我可以只創建一個調用數據庫和檢索所有項目,並把它們放到收集。然後我可以通過流來搜索特定的物品,同時使用遞歸功能。 例2:
private String generateId(List<MyMessages> messages) {
String myId = StaticFunction.generateMyId();
MyMessages myMessage = messages.stream().filter(m ->
m.getCorrelationId.equals(myId)).findFirst().orElse(null);
if (MyMessages != null) {
generateId(messages);
}
return myId;
}
我的問題是什麼是讓這件事情吧,最好的辦法?你有其他解決方案嗎?以上例子的優點和缺點是什麼?
你爲什麼不使用數據庫生成的ID –
和第三選擇是剛插入任何和失敗的重複鍵 –
@ScaryWombat我不使用,因爲某些原因產生的ID correlation_id有時可以爲null,並且我還需要一些項目以包含null作爲correlation_id –