我正在考虑用 elasticsearch 替换 memcached。基本上,我需要减少我的软件堆栈,并且由于我将使用 elastic 进行搜索,所以我正在考虑创建一个索引作为通用缓存,我将在其中存储各种项目。
有没有办法创建这样一个“通用存储桶”,可以容纳不同的项目而不会出现弹性抱怨?从我目前看到的情况来看,当您第一次存储一个项目时,弹性会自动为每个键创建一个类型。如果您尝试保存另一个项目,而该项目恰好具有已映射的弹性键,并且具有不同的值,则这可能会导致麻烦。
有什么方法可以实现上述目标吗?
问候
答案1
Elasticsearch 是一个搜索和索引数据库类型,为搜索和分析而构建和优化,而不是为缓存而构建和优化。
对于缓存服务器,您可以使用 Memcached。但是现在还有其他替代方案,例如 Redis(键值数据库) 速度更快,支持更复杂的解决方案。Carl Zulauf 已经很好地描述了 Redis 和 Memcached 之间的区别在 stackoverflow 上。
答案2
虽然 remyseroos 的回答完全正确,但我认为在某些情况下,ElasticSearch(es)可以很好地替代缓存服务器提供的一些功能。
例如,想象一下使用 es 作为 Web 应用程序的读取访问层,重点是 CRUD(和搜索)。Es 为数据库中持久保存的数据提供了一个快速的 REST API,您只需将其暴露给读取数据 - 使用 es 作为数据库的缓存。您将承担数据库的负载,通过优雅的 json REST API 获得令人难以置信的快速访问,而您无需自己构建。
这里需要考虑的一些事项包括:
- 仅在需要时更新您的 es 索引,因为更新速度很慢,而且
- 尽可能使用 es bulk api 例如当
- 您必须在部署时重建索引
- 您可以使用基于内存的索引来加快响应时间。
- 安全性是需要首先考虑的问题,因为保护 es REST 接口的安全有些棘手。
事实上,我们刚刚使用elasticsearch-transport-wares到目前为止,我们的工作进展顺利。