以 redux 状态存储大数据 - 30,000 项

Posted

技术标签:

【中文标题】以 redux 状态存储大数据 - 30,000 项【英文标题】:Storing big data in redux state - 30,000 items 【发布时间】:2018-03-31 10:18:39 【问题描述】:

我目前有一个 Web 套接字,它将 JsonAPI 格式的数据推送到 react-native 应用程序,然后该应用程序将项目每隔一段时间放置在 redux 存储中。

完美适用于 5,000 - 10,000 件商品。但是我需要支持大约 30,000 个项目。每个项目(对象)平均有 12 个键。

目前,当我规范化部分数据或将新数据块与我存储中已有的现有数据合并时,这会使应用程序崩溃。

任何建议将不胜感激。

import debounce from 'lodash/debounce'
import merge from 'lodash/merge

let data = 

const migrateData = () => 
    InteractionManager.runAfterInteractions(() => 
        dispatch(createSocketData(data))
        data = 
    )


const debounced = debounce(migrateData, 3000)

cable.subscriptions.create('SyncChannel', 
    received: (payload) => 
        if(payload.serialized)
            data = merge(data, normalize(payload.serialized))
            debounced()
        
    
)

【问题讨论】:

【参考方案1】:

我不建议您将大数据存储在 redux 存储中。目前您需要支持 30,000 个项目。明天你需要支持50,000个项目,100,000个项目......

您可以尝试使用特定于存储的组件来解决您的问题。 例如我使用 SQLite3。

SQLite3 component for react-native support both for ios and android

【讨论】:

【参考方案2】:

您可能想要使用 Realm。

在 Realm 中存储 1000 个对象应该没有问题。它已针对存储大量数据进行了优化,并且仅在需要时才将数据加载到内存中。

【讨论】:

以上是关于以 redux 状态存储大数据 - 30,000 项的主要内容,如果未能解决你的问题,请参考以下文章

在页面重新加载之间直接访问 redux 存储以访问和保持状态是一种不好的做法吗

前端知识 | Redux的使用

如何将操作发送到 redux-devtools 存储以从组件导入状态?

如何以正确的方式读取组件内的 redux 状态?

前端知识 Redux的使用

Redux - 处理非常大的状态对象