說我有與2個二次索引的 「消息」 表:如何處理數據庫分片中的非規範化/二級索引?
- 「recipient_id」
- 「SENDER_ID」
我想通過 「recipient_id」 到分片的 「消息」 表。這種方式來檢索發送給某個收件人的所有郵件,我只需要查詢一個分片。
但是與此同時,我希望能夠進行查詢,詢問某個發件人發送的所有郵件。現在我不想將該查詢發送到「消息」表的每個分片。一種方法是複製數據,並有一個由「sender_id」分隔的「message_by_sender」表。
該方法的問題是,每次發送消息時,都需要將消息插入「message」和「message_by_sender」表中。
但是如果插入「message」後插入到「message_by_sender」失敗怎麼辦?在這種情況下,消息存在於「消息」中,但不存在於「message_by_sender」中。
如何確保如果消息存在於「消息」中,那麼它也存在於「message_by_sender」中而不訴諸兩階段提交?
這對於任何分割數據庫的人來說都是一個非常普遍的問題。你如何處理它?