我试图在电影中找到每个演员的收入。这很简单,但这是我现在所拥有的一个例子:
// without actor
{
"ID": 1,
"Timestamp": "2014-01-01 00:02:12",
"Title": "Great White Shark",
"Amount": 4.99
}
如果我有财务方面的100M条目并且我要求标题= GreatWhiteShark的汇总,那么这不是问题。
然而,当我添加一个Actor时,结构变得非常冗长,并且可能会使我的存储大小增加10倍 -
{
"ID": 1,
"Timestamp": "2014-01-01 00:02:12",
"Title": "Great White Shark",
"Amount": 4.99,
"Actors": [Christopher Plummer,Andrew Garfield,Heath Ledger,
Lily Cole,Jude Law,Verne Troyer,Johnny Depp,
Tom Waits,George MacKay,Tom Holland,Saoirse Ronan,
Seymour Cassel,Sofia Milos]
}
这样我可以提出一个问题,例如" 2011年与克里斯托弗·普拉默合影的电影赚了多少钱?"。
有没有更好的方法来完成上述结构?我主要担心的是性能,次要的是存储大小。
答案 0 :(得分:0)
性能应该非常好,Elasticsearch无论如何都会为actors数组构建一个倒排索引。查询演员将立即返回所有相关电影。
对于空间缩减,您可以尝试将每个actor名称编码为整数id而不是actor slug。但是你应该首先尝试slug变体,因为这不会破坏Kibana等的可读性和集成。
您提出的结构非常适合Elasticsearch。