elasticsearch 在单个请求上更新大型数据集的最佳方法是什么[关闭]

gcuhipw9  于 7个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(73)

已关闭。此问题为opinion-based。目前不接受回答。
**要改进此问题吗?**更新此问题,以便editing this post可以使用事实和引文来回答。

7天前关闭
Improve this question
我正在与至少0.2M用户的社交网络应用程序工作。在应用程序中,用户可以从第三方分享任何东西,以及用户可以上传自己的媒体作为帖子。有不同类型的隐私

  • 用户隐私
  • 用户可以是public
  • 用户可以是私有的用户分享或上传的任何内容都将在一个盒子里,盒子也有不同类型的隐私
  • public box(如果您是public,则每个人都可以看到此框的内容)
  • 好友专用框(只有您的关注者可以看到此框的内容)
  • private(只有您可以看到此框的内容)

现在的问题是,我有大量的数据集。所以当一个用户改变他/她的帐户隐私从公共到私人或私人到公共,我必须根据隐私更新所有数据。此外,用户也可以改变盒子的隐私。所以我需要更新用户所有共享的帖子,这个盒子相应。但大多数时候,我未能更新,由于框架和技术,我使用我使用的技术

  • Lumen(PHP)微服务架构
  • MySQL
  • Elasticsearch(用于连接检索)
  • Redis和Memcached
  • Postgres

当用户在平台上共享任何东西时,共享的数据存储在数据库中,并且数据插入elasticsearch中,因此所有数据都是从PHP客户端的elasticsearch中检索的。
现在我想定义一个像Instagram这样的架构,每当用户更改帐户隐私或框隐私时,我必须根据这两个隐私更改内容。
我读了不同类型的文章,但没有得到任何密切的想法,这一点。请建议任何有用的文章或想法给我。

ovfsdjhp

ovfsdjhp1#

我同意@KolovosKonstantinos,你应该尝试建模你的应用程序数据,以避免大型数据集的更新.也可能是有趣的,你可以检查我们的嵌入式与引用文档的概念.这里有几个不错的帖子关于这个主题:

我建议尝试以下方法:

  • 用户实体具有隐私属性,并且每种类型的框都有不同的帖子ID集合
  • 每个帖子都作为一个单独的文档存储在Elastic中
  • 根据用户隐私设置,你可以使用不同的查询来从不同的集合中选择post id。当post的隐私改变时,只需将其id从一个集合移动到另一个集合。是的,当你知道它的id时,你需要第二个查询(有时称为往返)到存储来检索post。这是你要做的权衡。定义架构就是关于权衡的。

因此,您的数据可能看起来如下所示:

User document:
{
    "userId": "1",
    "privacy": "Public",
    "publicBoxPostIds":  [1,3],
    "friendsBoxPostIds": [2],
    "privateBoxPostIds": [],
}

Post documents:
{
    "postId": "1",
    "postText": "zbzb",
     ...
},
{
    "postId": "2",
    "postText": "xcxc",
     ...
}
...

字符串

相关问题