Redis全文搜索:反向索引还是太阳黑子?

gba*_*lot 7 sunspot redis

我有3.5百万条记录(readonly)实际存储在一个MySQL数据库中,出于性能原因我想将其提取给Redis.实际上,我已经设法将这样的东西存储到Redis中:

1 {"type":"Country","slug":"albania","name_fr":"Albanie","name_en":"Albania"}
2 {"type":"Country","slug":"armenia","name_fr":"Arménie","name_en":"Armenia"}
...
Run Code Online (Sandbox Code Playgroud)

我在这里使用的密钥是遗留的MySQL id,所以使用一些Ruby胶水,我可以在这个现有应用程序中尽可能少地破解(这是一个严重的问题).

现在问题是当我需要在值部分内搜索关键字"Armenia"时.似乎只有两种方法:

要么我繁殖Redis索引:

要么我使用太阳黑子或一些全文搜索引擎(不幸的是,我实际上使用的ThinkingSphinx太多与MySQL绑定:-(

那么,你会做什么?你认为MySQL to Redis移动单个表是一个好主意吗?我担心这些巨大的Redis密钥/值可能占用16GB RAM服务器的内存占用.

有关类似Redis用法的任何反馈?

Eli*_*Eli 4

在开始给出真正的答案之前,我想提一下,我认为您没有充分的理由在这里使用 Redis。根据您想要尝试的用例类型,听起来像elasticsearch之类的东西会更适合您。

也就是说,如果您只想能够搜索 JSON 中的几个不同字段,您有两个选择:

  1. 辅助索引指向field_key -> list_of_ids(在您的情况下,“亚美尼亚”-> 1)。
  2. 在 Redis 之上使用 Lua 进行 JSON 编码和解码,以获得您想要的结果。这更加灵活且节省空间,但随着表的增长,速度会变慢。

再说一遍,我认为这两者都不适合您,因为听起来 Redis 不会是您的不错选择,但如果您必须这样做,那么这些应该都可以。