json - Elasticsearch 将用户输入存储为 JSON 文档

标签 json elasticsearch architecture spring-data-elasticsearch

我有一个以下架构问题——我的应用程序后端是用 Java 编写的,客户端是 AngularJS 编写的。现在我需要将用户输入存储在页面上,以便能够共享和收藏我的应用程序 url 并通过这个 url 恢复状态。

我将实现以下方法 - 每次用户通过选择页面上的数据和条件与我的应用程序交互时,我都会将他的所有输入收集到一个复杂的 JSON 文档中,并将该文档存储在 Elasticsearch 中。来自 ES 的此文档的 key 我将发送回客户端应用程序(AngularJS)并基于此 key 我将更新页面 url。例如,原始网址如下所示:

http://example.com/some-page

基于来自服务器的 key ,我将将此 url 更新为以下内容:
http://example.com/some-page/analysis/234532453455

在哪里 234532453455是 ES 中文档的键。

每次用户都会尝试访问以下网址 - http://example.com/some-page/analysis/234532453455 AngularJS 应用程序将尝试通过 Java 后端 REST 端点按键 (234532453455) 获取保存的状态。

它会起作用吗?

另外,我现在怀疑如何防止 ES 中的文件重复。现在我没有使用 ES 的经验,所以不知道 ES 的哪种方法可以开箱即用地用于此目的。

例如,计算每个 JSON 文档的一些哈希码并将这个哈希码存储为文档的键是一个好主意。所以在存储新文档之前,我可以通过哈希码检查旧文档。性能对我来说也很重要,所以也请考虑到这一点。

最佳答案

对我来说,听起来你尝试实现缓存。

是的,您可以这样做,但如果您只将 ES 用于此解决方案,那么我认为您最好查看 redismemcached .

我不能说 ES 是不好的解决方案,但是 ES 有一些技巧,你必须记住它,例如它的 near realtime search .索引数据后,它们不能立即用于搜索,这取决于配置需要几秒钟(但您也可以调用 _refresh,但如果您经常索引数据,我不确定性能)。

哈希:我没有理由使用我最好创建正确的 id。因此,如果您有每个用户的报告类型,则 id 可能是 "reporttype_{userid}" ,因为如果您将哈希用作 ID,那么每个新对象都会有新的 id,而不是重写,您最终会为该用户拥有许多旧数据的副本。如果您使用模式 reporttype_{userid} ,那么每次用户使用新数据重新生成报告时,您都会覆盖它。

作为一个选项,您可以添加到该选项字段 用户名 过期 对于 future 的清理,例如你可以有一个工作来清理过期的报告,但这只有在你使用 ES 时才有效,因为在 redis 和 memcached 中有一个选项可以在你保存数据时设置过期

关于json - Elasticsearch 将用户输入存储为 JSON 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42190760/

相关文章:

.net - Web 上下文中静态类的生命周期

javascript - 让 JSON 对象在 NodeJS 中工作的问题

php - JSON 显示为 PHP 数组而不使用 json_decode()

javascript - $.each() jQuery 新闻源

elasticsearch - type keyword 和 not analyzed 有什么区别?

mysql - 应用架构 MySQL/PHP/Java/AngularJS

PHP OO - 如何初始化您的业务对象?

java - mapper.writeValue() 方法出错

elasticsearch - 字词包含方括号时,嵌套内部匹配中没有亮点

elasticsearch - 如何重新平衡分片elasticsearch