V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zisen
V2EX  ›  问与答

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

  •  1
     
  •   zisen · 2021-03-19 23:52:42 +08:00 · 910 次点击
    这是一个创建于 1344 天前的主题,其中的信息可能已经有所发展或是发生改变。
    初学 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
    3 条回复    2021-03-20 09:27:08 +08:00
    eason1874
        1
    eason1874  
       2021-03-19 23:57:31 +08:00   ❤️ 2
    用文件数据库 SQLite
    AS4694lAS4808
        2
    AS4694lAS4808  
       2021-03-20 06:50:46 +08:00 via iPhone   ❤️ 1
    sqlite,做好索引不是问题
    zisen
        3
    zisen  
    OP
       2021-03-20 09:27:08 +08:00
    @eason1874 @AS4694lAS4808 感谢两位大佬!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2729 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:24 · PVG 20:24 · LAX 04:24 · JFK 07:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.