首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将Redux与超大数据集和IndexedDB集成

如何将Redux与超大数据集和IndexedDB集成
EN

Stack Overflow用户
提问于 2015-11-30 14:41:05
回答 1查看 11.2K关注 0票数 36

我有一个应用程序,它使用同步API来获得其数据,并要求将所有数据存储在本地。数据集本身非常大,我不愿意将其存储在内存中,因为它可以包含数千条记录。由于我不认为实际的数据结构是相关的,让我们假设我正在构建一个需要离线访问的电子邮件客户端,并且我希望我的存储机制是IndexedDB (异步)。

我知道一个简单的解决方案是不将数据结构作为状态对象的一部分,只使用所需的数据填充状态(例如,在触发EMAIL_OPEN操作时将电子邮件内容存储在状态中)。这很简单,特别是使用redux-thunk。

然而,这意味着我需要折衷两件事:

  1. 用户数据不再是“应用程序状态”的一部分,尽管事实上它是。由于同步行为很复杂,而且从应用程序状态机中删除它会损害redux概念的优雅(据我所理解的方式)
  2. 我真的很喜欢redux体系结构,希望我的所有逻辑都通过它,而不仅仅是视图状态。

关于如何将redux与非内存状态属性一起使用,有什么最佳实践吗?我发现最难理解的事情是redux依赖于同步API,所以我不能用异步状态对象替换我的状态对象(除非我完全删除redux并用我自己的异步实现和连接器替换它)。

我用谷歌找不到答案,但如果在这个主题上已经有很好的资源,我也很乐意被指出。

更新:问题已经回答,但我想更好地解释我是如何实现它的,以防有人遇到它:

其主要思想是使用redux reducers维护客户端和服务器的更改列表,并使用连接器侦听这些更改列表以更新IDB,并使用客户端更改更新服务器:

  1. 当客户端进行更改时,使用reducers更新客户端更改列表。
  2. 当服务器发送更新时,使用reducers更新服务器更改列表。
  3. A连接器侦听存储,并在状态更改时更新IDB。还要维护modified.
  4. When更新服务器的项目的内部列表,使用已修改的项目列表从IDB中提取增量并发送到服务器。
  5. 当访问数据时,使用常规操作从IDB中提取(例如使用redux-thunk)

这种方法唯一的警告是,因为实际状态存储在IDB中,所以我们确实失去了拥有一个状态对象的一些价值(而且更难倒带/快进状态)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 06:33:43

我认为你的第一个预感是正确的。如果(!)你不能把所有东西都储存在商店里,你必须在商店里储存更少的东西。但我相信我可以让这个解决方案听起来更好:

IndexedDB只是成为另一个端点,就像您使用的任何服务器应用程序接口一样。当您从服务器获取数据时,您将其转发到IndexedDB,然后从那里填充您的存储。只要它不会变得太大或太陈旧,商店就会得到它需要的东西,并缓存它。

这真的与Facebook使用他们的API没有什么不同。商店里永远不会有一个用户的所有数据。引用是使用ID实现的,这些ID在需要时加载。

你可以把你所有的逻辑都放在redux中。只需像往常一样为用户操作和数据更改创建操作,获取所需的数据并对其进行处理。接口仍然完全由用户数据定义,因为在需要时,您始终在存储中有需要的信息,以获取其剩余部分。它只是有点压缩,也就是说,你只保存消息总数或邮箱的ID,直到用户导航到它。

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33992812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档