普通 JSON 与 React-native 的应用程序内数据库?
Plain JSON vs in-app DB for React-native?
我有 50-100mb 的数据集,用户需要访问这些数据集。它是静态的,因此为其托管服务器没有意义。我将对数据执行两种操作:
- 通过唯一的 ObjectId 读取对象。每个对象大约 3kb。
- 通过约 300.000 个字符串进行全文搜索。每个字符串为 4-60 个字符。
我正在考虑将数据存储为 JSON 文件。 300k 字符串将单独存储。我将使用 https://github.com/nextapps-de/flexsearch 或类似的东西对其进行搜索。早在 2016 年,我就用 ~10mb 数据集做过类似的事情。我只使用了正则表达式搜索,它工作得很好。
是否有理由使用 RealmDB、SQLite、PouchDB 或其他东西而不仅仅是 JSON?
我想说这实际上仅取决于您是否想要并且需要利用关系查询的强大功能。因为您的数据永远不会改变,所以我会使用 JSON 除非您尝试在数据之间执行复杂的比较。在你的情况下,听起来你只是要搜索特定的 ObjectId 所以 JSON 是你最好的选择,特别是因为你说你以后不需要更改数据。
如果您组织 JSON 以便您的 ObjectId 排序,您将能够轻松快速地进行搜索。
我希望我一年前做这个问题...
在我目前工作的办公室里,我们尝试使用 PouchDB 创建一个应用程序并响应本机,我们基本上认为 PouchDB 是一个优势,因为它不需要我们 API 一遍又一遍地发送所有数据在用户触发的每次刷新时,它只会发送根据客户端检查点更改的数据。由于服务器中的数据非常大(大约 6k 个条目,每个条目超过 200 个属性),我们不惜一切代价尝试简化客户的数据计划。
此实施到位几个月后,我们实施了具有许多不同选项的搜索功能,用于排序和过滤,不仅我们不得不放弃我们所有的 PouchDB 实施,而且我们必须从头开始替换它的所有具有索引 JSON 值的逻辑。 PouchDB 性能极慢,检索结果需要超过 5 秒左右的时间,而我们不能在我们的范围内延迟这个时间。
最后,我们在索引的 JSON 中实现了非常快速的搜索 运行 flex search
。不要重蹈我们的覆辙,PouchDB 花费了我们太多的预算和宝贵的时间。这是一个糟糕的选择。
不幸的是,我无法从可靠的来源提供证据或更多详细信息,我只能分享我个人的糟糕经历,当时我认为我们已经到了项目的尾声,我们不得不从头开始。一团糟。
天哪,这是一个基于意见的赏金问题!
我有大约 5 年的 pouchDB 经验,特别是 SQLite。我对 RealmDB 只有粗略的体验 - 我试用了一下,发现它不适合我的 hybrid/mobile 需求。
pouchDB 在一个领域超越了手 - synchronization/replication 就像它的老大哥 CouchDB。提供与与远程数据库同步的离线数据库的交互对于许多移动应用程序来说是巨大的。 pouchDB 是无模式的,利用 JSON 文档。使用 pouchDB,可以通过适配器在多个数据存储中进行选择。由于您的数据大小可能 quota headaches1 正确的选择可能是 SQLite 适配器。 pouchDB 不支持全文搜索。
SQLite 顾名思义 - 一个关系数据库,需要一个模式。 SQLite 的一个优势是平台支持,并且数据库的大小不受网络存储(例如 IndexedDB)之类的配额问题的影响。 SQLite 支持全文搜索,应用程序可以使用固定数据库进行部署。
介于 pouchDB 和 SQLite 之间的是 RealmDB - 它是一个基于模式的对象数据库,支持 synchronization/replication。和pouchDB一样,不支持全文搜索
现在你的要求
- 通过id查找对象
- 300k 静态文本
- 全文搜索
我读 'static' 的意思是不可变的。
由于你的数据不会变化,需要全文搜索,所以pouchDB和RealmDB都不是好的选择。如果需要增强、删除或添加数据,这两种方法都有意义,因为对单个服务器上的数据所做的更改会以几乎无缝的方式将更改复制到本地数据库。
SQLite 可能是一个合理的选择,因为它支持搜索,并且可以使用应用程序部署固定数据库。但是,SQLite 在混合应用程序中可能会很慢。
所以,
- pouchDB 和 RealmDB 会大材小用,并不适合。
- SQLite 会增加一些复杂性。
根据您的具体要求,我会继续按照您的方式行事,尽管我很小心,因为它似乎将 flexsearch 的索引加载到内存中 - 如果它的性能 returns 有一些损失,那么 SQLite 具有部署能力固定数据库和提供搜索工具可能证明是与复杂性的合理权衡。
祝你好运!
1Quota Headaches
我有 50-100mb 的数据集,用户需要访问这些数据集。它是静态的,因此为其托管服务器没有意义。我将对数据执行两种操作:
- 通过唯一的 ObjectId 读取对象。每个对象大约 3kb。
- 通过约 300.000 个字符串进行全文搜索。每个字符串为 4-60 个字符。
我正在考虑将数据存储为 JSON 文件。 300k 字符串将单独存储。我将使用 https://github.com/nextapps-de/flexsearch 或类似的东西对其进行搜索。早在 2016 年,我就用 ~10mb 数据集做过类似的事情。我只使用了正则表达式搜索,它工作得很好。
是否有理由使用 RealmDB、SQLite、PouchDB 或其他东西而不仅仅是 JSON?
我想说这实际上仅取决于您是否想要并且需要利用关系查询的强大功能。因为您的数据永远不会改变,所以我会使用 JSON 除非您尝试在数据之间执行复杂的比较。在你的情况下,听起来你只是要搜索特定的 ObjectId 所以 JSON 是你最好的选择,特别是因为你说你以后不需要更改数据。
如果您组织 JSON 以便您的 ObjectId 排序,您将能够轻松快速地进行搜索。
我希望我一年前做这个问题...
在我目前工作的办公室里,我们尝试使用 PouchDB 创建一个应用程序并响应本机,我们基本上认为 PouchDB 是一个优势,因为它不需要我们 API 一遍又一遍地发送所有数据在用户触发的每次刷新时,它只会发送根据客户端检查点更改的数据。由于服务器中的数据非常大(大约 6k 个条目,每个条目超过 200 个属性),我们不惜一切代价尝试简化客户的数据计划。
此实施到位几个月后,我们实施了具有许多不同选项的搜索功能,用于排序和过滤,不仅我们不得不放弃我们所有的 PouchDB 实施,而且我们必须从头开始替换它的所有具有索引 JSON 值的逻辑。 PouchDB 性能极慢,检索结果需要超过 5 秒左右的时间,而我们不能在我们的范围内延迟这个时间。
最后,我们在索引的 JSON 中实现了非常快速的搜索 运行 flex search
。不要重蹈我们的覆辙,PouchDB 花费了我们太多的预算和宝贵的时间。这是一个糟糕的选择。
不幸的是,我无法从可靠的来源提供证据或更多详细信息,我只能分享我个人的糟糕经历,当时我认为我们已经到了项目的尾声,我们不得不从头开始。一团糟。
天哪,这是一个基于意见的赏金问题!
我有大约 5 年的 pouchDB 经验,特别是 SQLite。我对 RealmDB 只有粗略的体验 - 我试用了一下,发现它不适合我的 hybrid/mobile 需求。
pouchDB 在一个领域超越了手 - synchronization/replication 就像它的老大哥 CouchDB。提供与与远程数据库同步的离线数据库的交互对于许多移动应用程序来说是巨大的。 pouchDB 是无模式的,利用 JSON 文档。使用 pouchDB,可以通过适配器在多个数据存储中进行选择。由于您的数据大小可能 quota headaches1 正确的选择可能是 SQLite 适配器。 pouchDB 不支持全文搜索。
SQLite 顾名思义 - 一个关系数据库,需要一个模式。 SQLite 的一个优势是平台支持,并且数据库的大小不受网络存储(例如 IndexedDB)之类的配额问题的影响。 SQLite 支持全文搜索,应用程序可以使用固定数据库进行部署。
介于 pouchDB 和 SQLite 之间的是 RealmDB - 它是一个基于模式的对象数据库,支持 synchronization/replication。和pouchDB一样,不支持全文搜索
现在你的要求
- 通过id查找对象
- 300k 静态文本
- 全文搜索
我读 'static' 的意思是不可变的。
由于你的数据不会变化,需要全文搜索,所以pouchDB和RealmDB都不是好的选择。如果需要增强、删除或添加数据,这两种方法都有意义,因为对单个服务器上的数据所做的更改会以几乎无缝的方式将更改复制到本地数据库。
SQLite 可能是一个合理的选择,因为它支持搜索,并且可以使用应用程序部署固定数据库。但是,SQLite 在混合应用程序中可能会很慢。
所以,
- pouchDB 和 RealmDB 会大材小用,并不适合。
- SQLite 会增加一些复杂性。
根据您的具体要求,我会继续按照您的方式行事,尽管我很小心,因为它似乎将 flexsearch 的索引加载到内存中 - 如果它的性能 returns 有一些损失,那么 SQLite 具有部署能力固定数据库和提供搜索工具可能证明是与复杂性的合理权衡。
祝你好运!
1Quota Headaches