我們正在構建一個消息系統,其中消息分佈在多個列表之間。我們當前的實現是建立在Redis的,看起來是這樣的:elasticsearch上的消息系統
Message comes in from user 「peeter」
Message is added to list 「user:peeter:messages」
Since peeter is in the group 「developers」 the message is also added to 「group:developer:messages」 list
Since the group developers belongs to a watchlist (a group of groups) called 「it」, the message is also added to "watchlist:it:messages" list
現在我們有一個新的要求,列出需要連接到它們的過濾器。因此,組「開發人員」將有一個過濾器「+ php -javascript」,以僅顯示來自該組中與該過濾器匹配的用戶的消息。
我們考慮將整個事情轉移到elasticsearch。因此,我們將我們的指數在以下格式的消息:
{
message : "PHP is awesome and Javascript is awesome and Java is awesome",
user : "peeter",
groups : ["developers", "architects"],
watchlists : ["it", "tech personel", "weekend workers", "emergency staff"]
}
當我們尋找了「開發者」組中,我們會在下面的格式查詢彈性:
{
query_string : "+php -javascript",
term : {
"groups" : "developers"
}
}
的問題是這些列表經常變化。新用戶被添加到「開發人員」組中,並將新組添加到監視列表中。您也可以將2個組合並在一起,因此「開發人員」和「架構師」成爲名爲「dev-architects」的單個組。我們將留下一個不斷更新而又大量閱讀的索引。
我們有第二個想法是指數按以下格式文件:
{
message : "PHP is awesome and Javascript is awesome and Java is awesome",
user : "peeter"
}
當我們尋找了「開發者」組中,我們會在下面的格式查詢彈性:
{
query_string : "+php -javascript",
term : {
"user" : "peeter", "michael", "jamie"
}
}
這種方法的問題是,組「開發人員」中可能有多達2000個用戶。
這些解決方案中的任何一個是否有效?
不會logstash(http://logstash.net/docs/1.4.0/tutorials/getting-started-with-logstash),建立在ES的頂部(並且因爲幾個月的一部分)ES已經提供了大部分/所有你需要的東西? –
這不適用於日誌文件管理。 – Peeter
是的,我意識到,但不是概念上類似的日誌條目和事件消息?無論如何,第二,雖然我不認爲這是一個很好的組合,因爲你需要'觀察列表'的概念。 –