一个背单词小 app, 想知道哪种数据存储方法更高效

2021-03-19 23:52:42 +08:00
 zisen
初学 python 一点点, 想自己上手写一个完整功能的简单的背单词 app, 采用的是遗忘曲线方法, 每个单词有个 level, level 越高那么距离下次记忆的时间越长, 想了两种解决方案, 但还没开始写具体的程序, 以下是我的思路.

---

启动程序:

1. 检查 csv 文件中的 level 属性和 date 属性,若无则设置为 0 和当前 date
2. 检索符合当天 date 的单词, 将其导入到 python_list 中, 每个单词及其属性以 dict 形式保存
3. 若用户设置了每日背词数量, 则优先推送 level>0 的单词, 否则不安排优先顺序

推送程序:

1. 推送单词本体, 用户尝试回忆单词含义,
2. 回车键显示含义, 用户认知正确则 level+1, 同时计算 date,
3. 若用户认知错误则 level 清零, 同时安排单词到 list 末尾, 稍后再次回忆
4. 记忆单词结束以后, 将 list(包含已更新的 level 和 date)写回到数据库中

导入功能:

用户可以自行增加单词(其中不含 level 和 date 属性)并 merge 到数据库中, 不会影响到已存在的的单词及其属性

---

虽然我还没有开始写程序, 但是我想到了一个问题, 当数据库中的单词数量日积月累地增多时, "检索单词的属性"这件事会变得缓慢甚至卡顿, 于是我想到了另一种方案:

date 并不作为单词的属性而是作为文件名,

当天打开 app 时直接在文件夹中寻找名为 date.csv 的文件并读取到 list 中,

level 值发生变化时计算相应的 date:

若 date.csv 已存在则写入文件的末尾,

若不存在则创建一个 date.csv 并写入到第一行

导入程序则需要创建一个识别库(仅包含单词本身, 无其他属性), 避免导入重复的单词, 符合规则的单词直接进入 date.csv 文件

---

examples:https://www.notion.so/zisenminotion/64d0c77494a74698937323284a7657b0?v=9486467933814fde9cfc7d64afb5087c

如果大佬有其他方案欢迎提出, 不过尽量不要太复杂, 目前我也没接触数据库这方面的知识
这是我的笔记地址
https://www.notion.so/zisenminotion/Words-Learner-Pro-d21c221891604b0fa0d47c6a1a27bdc9
845 次点击
所在节点    问与答
3 条回复
eason1874
2021-03-19 23:57:31 +08:00
用文件数据库 SQLite
AS4694lAS4808
2021-03-20 06:50:46 +08:00
sqlite,做好索引不是问题
zisen
2021-03-20 09:27:08 +08:00
@eason1874 @AS4694lAS4808 感谢两位大佬!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/763352

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX