Используя Couchbase Server 2.0, вы можете настроить две корзины (или два отдельных кластера, если вы хотите разделить физические ресурсы). В кластере сеансов вы должны хранить документы JSON (значение в паре ключ/значение), например, как показано ниже:
{
"sessionId" : "some-guid",
"users" : [ "user1", "user2" ],
"chatData" : [ "message1", "message2"],
"isActive" : true,
"timestamp" : [2012, 8, 6, 11, 57, 00]
}
Затем вы можете написать представление Map/Reduce в базе данных сеанса, которое даст вам список всех элементов с истекшим сроком действия (обратите внимание, что приведенный ниже пример с мета-аргументом требует последней сборки Couchbase Server 2.0, а не DP4.
function(doc, meta) {
if (doc.sessionId && ! doc.isActive) {
emit(meta.id, null);
}
}
Затем, используя любую клиентскую библиотеку Couchbase, которую вы предпочитаете, у вас может быть задача запросить представление, получить элементы и переместить их в аналитический кластер (или корзину). Таким образом, в C# это будет выглядеть примерно так:
var view = sessionClient.GetView("sessions", "all_inactive");
foreach(var item in view)
{
var doc = sessionClient.Get(item.ItemId);
analyticsClient.Store(StoreMode.Add, item.ItemId, doc);
sessionClient.Remove(item.ItemId);
}
Если вместо этого вы хотите использовать явную временную метку или истечение срока действия, ваше представление может индексироваться на основе временной метки:
function(doc) {
if (doc.sessionId && ! doc.isActive) {
emit(timestamp, null);
}
}
Затем ваша задача может запросить представление, включив ключ запуска, чтобы вернуть все документы, которые не были затронуты в течение x дней.
var view = sessionClient.GetView("sessions", "all_inactive").StartKey(new int[] { DateTime.Now.Year, DateTime.Now.Months, DateTime.Now.Days-1);
foreach(var item in view)
{
var doc = sessionClient.Get(item.ItemId);
analyticsClient.Store(StoreMode.Add, item.ItemId, doc);
sessionClient.Remove(item.ItemId);
}
Оформить заказ на http://www.couchbase.com/couchbase-server/next для получения дополнительной информации. на Couchbase Server 2.0, и если вам нужны какие-либо разъяснения по этому подходу, просто дайте мне знать в этой теме.
-- Джон
person
John Zablocki
schedule
06.08.2012