HaolinZhong / PMCA

Practice Makes Code Accepted
MIT License
93 stars 11 forks source link

切换设备后数据无法同步嘛 #21

Closed whxBUPT closed 4 weeks ago

whxBUPT commented 1 month ago

rt

HaolinZhong commented 1 month ago

你好! 如果需要在多个设备上同步数据:

  1. 需要同步的每台设备的chrome都要用同一个chrome用户登录.
  2. 登录的chrome用户需要开启数据同步功能.
  3. 需要在插件页面点击options图标, 打开options页面. 在options页面上开启cloud sync功能. (每台需要同步的设备都要打开)

如果经过以上设置还是有bug的话, 请告诉我更多的细节来让我进一步debug

谢谢👍

whxBUPT commented 1 month ago

您好,以上三部我都有设置,但好像还是无法进行数据同步,不知道是不是因为一台设备是windows一台是mac的原因?

HaolinZhong commented 1 month ago

你好, 可以在打开插件页面后, 通过chrome的inspect功能查看console里的信息. 如果console里出现 "Error: QUOTA_BYTES_PER_ITEM quota exceeded", 说明同步的数据量已经达到了chrome的同步api的上限. (我估算了一下, 目前允许同步的题目数量可能只有40 ~ 80题). 后续我会考虑优化同步方式或者实际引入数据库来解决这个问题.

whxBUPT commented 4 weeks ago

经过这两天的使用我来更详细地描述一下同步功能的bug: 新设备刚开始是没有任何记录的,可以通过老设备查看要复习的题目,但是当你在新设备上提交了需要复习的题目后,新设备上的Review Scheduled会多出一条新的题目记录,相当于对于新设备来说,它认为这个题目是你新做的,但是同时你也会观察到老设备上的review due中这个题目也不见了,并且以进度从0开始的形式重新出现在了老设备的review scheduled中,这意味这似乎新设备的数据可以同步给老设备,但老设备的数据似乎无法同步给新设备?🤔

HaolinZhong commented 4 weeks ago

同步发生时, 如果同一个题目有两条不同的数据发生冲突, 目前的代码会选择数据的修改时间更晚的那个来同步到local和sync storage

我猜事情的发生顺序是:

  1. 老设备开启了同步, 但是因为数据量超过了sync storage API限制, 同步失败了, 老设备上的记录没有写到sync storage
  2. 新设备开启了同步, 并且产生了少量数据, 成功写到sync storage
  3. 老设备上再次点开extension时发生同步, 从sync storage读到了新设备上的数据. 因为这些数据的修改时间更晚, 所以替换了老设备local storage中的相应题目数据. 但是, 因为老设备上的数据量仍然超过限制, 更新后的数据仍然无法写到sync storage.
  4. 新设备上依然读不到老设备的数据

本质上还是因为sync storage API的数据量限制问题... 之后我会优化一下, 短期内应该能支持约300题的同步. 长期来看这个sync API的容量还是太小了, 所以会搞一个数据库来一劳永逸地解决问题