2013-05-17 66 views
2

我想設置一個集合的ttl 一旦,建立一個使用mongoDB的java應用程序時,實現這個的慣用方法是什麼?做ppl只需要在shell中應用這些設置?或者在應用程序代碼中檢查一個集合是否已經存在於數據庫中是正常的,如果它不是,那麼使用所需的選項創建它。在應用程序或shell中設置mongoDB集合上的ttl?

謝謝!

回答

4

我從不在我的應用程序代碼中建立索引。

我承認我曾經。每次我的應用程序啓動時,我都會確保所有索引,直到突然有一天,初學者開發人員得到了我的代碼,並在我的索引序列中意外刪除了一個字符。

因此,整個集羣由於處理而在前景中凍結並下降,因此該索引建立。幸運的是,我有一些延遲的非索引建築奴隸可以修復,但我仍然失去了大約12個小時,反過來也是12個小時的生意。

我會建議您不要在應用程序代碼中建立索引,而是在mongo控制檯中精心設計。這適用於像這樣的任何操作,甚至TTL索引。

+1

謝謝你的建議,我們也會這樣做。 –

+0

雖然這是一箇舊線程,但答案仍然相關。但是,這種方法是否可以在集羣環境中使用?也許是的,非常困難,因爲在控制檯上執行此操作之前,您必須知道哪個節點是主節點。如果您使用部署工具,則必須先配置它,然後才能應用ttl,然後查詢主要是誰。如果你沒有集羣,那麼確保使用js文件的控制檯方法會很好。 – Azkuma

+0

我想說,如果你給了一個集羣,你應該像你暗示的那樣,使用一個能正確管理集羣及其屬性的工具。索引在集羣中獲得100倍的複雜度 – Sammaye

0

您可以按照文檔here對集合設置TTL。

使用Java驅動程序,我會嘗試:

theTTLCollection.ensureIndex(new BasicDBObject("status", 1), new BasicDBObject("expireAfterSeconds", 3600)); 

心連心。

+0

對不起,我的問題有點不清楚。我更希望在應用程序中完成這個任務。對於應用程序來說,在數據庫中設置集合的init()是否正常?(如果它們不在那裏)?因爲我只想申請一次這樣的設置,而不是每次我向記錄中添加一條記錄。) –

-1

設置一個TTL 是一個索引操作,所以我猜想在每次運行代碼時都做明智的表現並不明智。

+2

如果運行多次,它將被註冊爲空操作,因此沒有性能問題會真的出現 – Sammaye