我对React Native使用什么本地数据库?

时间:2017-09-20 16:35:06

标签: database react-native

我是新来回应原生的,我需要一份本地数据库工具列表,这些工具将符合以下描述中的最低标准。

如果这是一个PHP / MySQL应用程序,我构建了3个数据库表:

t_food (500 rows)
- food_id (primary_key)
- food_name (string)

t_meal (100 000 rows)
- meal_id (primary_key)
- meal_name (string)

t_meal_item (1 000 000 rows)
- meal_id (foreign_key)
- food_id (foreign_key)

这三个表合并在MySQL中占用大约10MB到15MB。然后我将使用PHP创建一个接口,该接口将显示此查询的结果:

SELECT meal_id FROM t_meal_item WHERE food_id = @food1 AND meal_id IN (SELECT meal_id FROM t_meal_item WHERE food_id = @food2 AND meal_id IN (SELECT meal_id FROM t_meal_item WHERE food_id = @food3))

在MySQL / PHP应用程序中,SQL查询的结果将在不到2秒的时间内返回。

在本土反应世界中,我需要一个能够达到与上述类似结果的本地数据库,但也必须符合以下要求:

  1. 必须支持15 MB的持久存储(以便您无需访问互联网即可使用它)

  2. 查询由3种食品过滤的餐点必须在不到3秒的时间内在现代主流移动设备上完成。例如。相当于上面的SQL查询必须在不到3秒的时间内在iphone 6和华为Nova Plus上完成。

  3. 我已经尝试了以下内容:

    一个。如此问题所示,Realm在标准2上失败:

    Improve the speed of a realm query in react-native?

    领域问题的解决方案将是这个问题的可接受答案。

    B中。六年前,我在iOS设备上尝试使用核心数据。由于内存不足,iOS设备不断崩溃。

    ℃。我正在尝试SQLite存储,但已经遇到了这个问题:

    basic React Native SQLite script returning undefined which causes error

    哪些工具可以解决这个问题?

5 个答案:

答案 0 :(得分:6)

考虑将本机作为前端库做出反应,需要一个安静的api才能连接,这样你就可以用php做后端,本机会从中接收数据

如果您需要本地数据库,可以使用react-native-local-mongodb

react-native-sqlite-storage

react-native-sqlite

如果您使用redux,也可以使用redux-persist

答案 1 :(得分:3)

我没有使用人们列出的那些其他数据库,但我会推荐Realm。 非常有用,快速,与反应原生完全集成,并且记录良好。

https://realm.io

答案 2 :(得分:1)

你可以使用SQLite,它有一个React Native的原生插件: https://github.com/andpor/react-native-sqlite-storage

答案 3 :(得分:1)

到目前为止,WatermelonDB似乎同时满足大小限制和性能要求。

Realm现在已经商业化,并且与MongoDB及其云服务紧密结合(或者至少从文档中可以看出)。

我也对PouchDB进行了快速浏览,但是其中之一是本机集成stockulus/pouchdb-react-native基于AsyncStorage(根据我的经验,它非常慢),而其他craftzdog/pouchdb-react-native是基于AsyncStorage的。基于sqlite,但最近几年没有任何活动。

答案 4 :(得分:0)

根据我的经验,这完全取决于应用程序的要求。如果您的应用程序规模不大,则可以使用React Native的默认异步存储;如果您使用的是redux,则可以使用redux-persist并为其提供异步存储插件,这样它将自动保存您的reducer。

在其他情况下,如果您有大型应用程序并且非常关注数据库,则应使用 WatermelonDB ,因为它是React Native的最佳可用数据库。它还提供了同步功能,通过该功能,您可以创建在线/离线应用程序,并将数据库自动同步到后端。 WatermelonDB还在后端使用SQlite来存储数据,但功能更强大,更有用