Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

强化KeyValueItem #7

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open

强化KeyValueItem #7

wants to merge 3 commits into from

Conversation

Arthurli
Copy link

@Arthurli Arthurli commented Nov 5, 2014

强化了keyValueItem的作用,使它能够直接加载和存储数据

@tangqiaoboy
Copy link
Member

谢谢你的改进,但是我有以下的看法:

  1. 我觉得没必要做一个专门管理 store 的manager,因为大多数情况有一个store就可以了。我认为store的正常用法是在它外层再包一个单例对象,把具体的业务逻辑封装在这个单例对象中。
  2. 每次put的时候返回一个 KeyValueItem 对象我也持保留态度。因为数据刚刚被调用者放进去,那么把刚刚放进去的数据返回给调用者让我觉得没什么必要。

@MappleHero
Copy link

@tangqiaoboy 这里关于如何store,我想请教一下。我看几个开源的基于FMDB的库,store文件都是单例,但是这个单例中维护的都是FMDatabase对象,那么在多线程访问情况下,这个就会有问题的。最近在使用FMDB做数据存储。数据库读取操作需要将操作放到子线程,否则会卡主线程。同时写操作的时候希望提高效率就会使用多线程。而通过单例维护FMDatabase对象的store,在使用多线程时会有问题。不明白为什么开源库不使用FMDatabaseQueue?不过YTKKeyValueStore中是使用FMDatabaseQueue,支持多线程的。
1、但是YTKKeyValueStore的store类不是单例。这里该如何选择是使用单例,还是使用普通类呢?博主上面写到"store的正常用法是在它外层再包一个单例对象,把具体的业务逻辑封装在这个单例对象中",但是如果我现在有很多个数据库,而我有要数据库迁移的需求,那我的做法是给每个数据库对象传入一个迁移对象。这个时候就不能使用单例。但是如果不用单例,store中会包括很多业务逻辑,复用性不高。(只是单例,store不是单例,我同时创建多个store,然后再多线程访问,是不是也会有问题)这里该如何选择,纠结~~

2、YTKKeyValueStore中表结构是(id, json, createTime),只是存储json数据,能够满足大部门需求吗?比如我现在想要排序、分组,或者需要对数据做一些筛选查询,只是json数据,我觉得很难满足大部分需求?

@tangqiaoboy
Copy link
Member

@MappleHero 抱歉回复晚了。

  1. 你如果有很多数据库,这些业务各自独立的话。那么你在业务逻辑上没必要把这些合成一个单例对象。单例只是为了保证上层对数据库的操作都在一个 FMDatabaseQueue 里面,否则会出现逻辑问题。
  2. 你如果要筛选,就把数据全部拿出来自己过滤,如果你觉得效率差,可以加一层内存缓存。这个开源库就是为了简单而做的,如果你的业务数据量太大,这种办法效率太低,那么就说明这个库不适合你。另外我觉得如果数据量没有上万,全部拿出来应该没什么问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants