我是新来回应原生的,我需要一份本地数据库工具列表,这些工具将符合以下描述中的最低标准。
如果这是一个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秒的时间内返回。
在本土反应世界中,我需要一个能够达到与上述类似结果的本地数据库,但也必须符合以下要求:
必须支持15 MB的持久存储(以便您无需访问互联网即可使用它)
查询由3种食品过滤的餐点必须在不到3秒的时间内在现代主流移动设备上完成。例如。相当于上面的SQL查询必须在不到3秒的时间内在iphone 6和华为Nova Plus上完成。
我已经尝试了以下内容:
一个。如此问题所示,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
哪些工具可以解决这个问题?
答案 0 :(得分:6)
考虑将本机作为前端库做出反应,需要一个安静的api才能连接,这样你就可以用php做后端,本机会从中接收数据
如果您需要本地数据库,可以使用react-native-local-mongodb
如果您使用redux,也可以使用redux-persist
答案 1 :(得分:3)
我没有使用人们列出的那些其他数据库,但我会推荐Realm。 非常有用,快速,与反应原生完全集成,并且记录良好。
答案 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来存储数据,但功能更强大,更有用