这种情况使用文件还是数据库比较好?

有一个词典数据,包括了每一个中文的基本信息,笔画,拼音等。数据大概是 4M 左右,用户每次使用只用到部分文字。如果使用 json 文件发送到客户端,可以使用浏览器缓存,用户使用时也不用每次都向服务器端请求数据,但是需要一次性拉取所有数据。如果把资料存进数据库,用户通过 api 获取所需要的数据,这样每次用户使用都需要拉取数据,但是只拉取用到的部分数据。哪一种方式会比较好?

阅读 2k
avatarAI BotBETA

在决定是使用文件(如JSON文件)还是数据库来存储和提供数据时,需要考虑多个因素,包括数据量、数据访问模式、系统的可扩展性、以及是否需要实时更新数据等。针对您描述的情况,以下是一些考虑点和建议:

使用文件(如JSON)

优点

  • 客户端缓存:由于整个数据文件被发送到客户端,可以利用浏览器的缓存机制,减少后续的请求。
  • 一次性加载:用户只需在首次访问时加载整个数据集,之后即可在本地快速访问。
  • 简单性:实现简单,无需设置和维护数据库。

缺点

  • 初始加载时间长:如果数据文件较大,初始加载时间可能会较长,影响用户体验。
  • 数据更新困难:如果数据需要频繁更新,每次更新都需要用户重新下载整个文件。
  • 内存和存储使用:在客户端占用较大内存和存储空间。

使用数据库

优点

  • 按需加载:用户只请求和加载所需的数据,减少网络传输量和加载时间。
  • 易于更新:数据库可以实时更新,无需用户重新下载整个数据集。
  • 可扩展性:随着数据量的增长,数据库系统通常比文件系统更易于扩展和管理。

缺点

  • 服务器负载:每次用户请求都可能触发数据库查询,增加服务器负载。
  • 网络延迟:用户需要通过网络获取数据,可能会受到网络延迟的影响。
  • 实现复杂:需要设置和维护数据库,以及编写API接口。

结论

对于您描述的场景,如果数据集大小(4M)相对较小,且用户不太需要频繁更新数据,使用JSON文件并利用浏览器缓存可能是一个简单且有效的解决方案。这样可以减少服务器的负载,并加快用户首次访问后的数据访问速度。

然而,如果数据集未来可能显著增长,或者需要频繁更新数据,或者系统需要更高的可扩展性和灵活性,那么使用数据库并通过API按需提供数据将是更好的选择。这样可以更好地管理数据,并减少客户端的存储和内存压力。

最终的选择应基于具体的应用场景和需求。

4 个回答

我会选择 API,而不是一次性下载。

  1. 4MB = 32Mb,按照 100kb/s 的话,下载一次也要 320s,即 5 分钟,如果是移动设备,很难
  2. 大部分网络请求可以留在网络和浏览器缓存中,对服务器压力不大
  3. 适当的优化可以减少网络请求,增加缓存命中率
  4. 如果用户不是深入使用,下载完整仓库太浪费了
  5. 数据 4M,带索引和数据结构就不止 4M 了

用 API + 缓存

用户使用时先查询缓存中有没有,没有再请求 API,并将请求结果添加到缓存

先写结论:用哪种方案,取决于用户是如何使用你们的产品。

如果用户需要高频输入,也就是需要高频次地查询词典,那么先把整个词典,全部加载到本地,用户体验会更好。

否则,做成 API,进行远程调用,对于管理与维护会更好。

另外讲一下,使用单位名称,一定要准确。数据不是 4M,而是 4MB。B 的意思是 Byte。
4MB 的 json 使用 web 通用的 gzip 压缩后,应该只有 0.4 MB - 1.2 MB 的大小。

100Mbps 带宽(这就是你们去电信营业厅办理的100兆带宽),每秒的下载速度是 12.5 MB/s(这就是迅雷等下载工具显示的下载速度),0.4 MB - 1.2 MB 的文件,不到 0.1 秒就能完成下载。

将数据拆成比较小的json文件放到前端静态资源中,这样前端打包完每个文件也很小,初次打开网页下载也块,然后前端会把数据全部读到内存,读起来也很快

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏