解決方法是偶爾將舊郵件捆綁到CouchDB attachments。當通過文檔ID查詢時,這些將不可見。
例如,會話文件:
{ "_id": "alice_bob"
, "_rev": "123-abcdef"
, "messages":
[ "alice: Hi, Bob!"
, "alice: Are you there?"
, "bob: Yes, what's up?"
, // ... etc.
, "bob: Thanks!"
]
}
例如,如果對話長度大於200點的消息,然後將它分割成兩個陣列:
- 最舊的消息的150(
"alice: Hi, Bob", and the next 149)
- 50最新留言:(49條留言,最高可達
"bob: Thanks!"
)
將附件中的舊郵件存檔,可能帶有時間戳。
{ "_id": "alice_bob"
, "_rev": "123-abcdef"
, "_attachments":
{ "2011-09-19T17:29:17.293Z.json":
{ "content_type": "application/json"
, "data": /* 150 message JSON string goes here */
}
}
, "messages": [ /* latest 50 messages go here */ ]
}
當你獲取/db/alice_bob
你會不得到附件數據;但是,您可以直接從此URL獲取甚至刪除附件。
/db/alice_bob/2011-09-19T17:29:17.293Z.json
請注意,這主要是一種變通方法。好處是你不必改變你的PHP代碼。 (歸檔消息可以是後臺進程。)但從長遠來看,Robert的技術更具可擴展性和正確性。