看了一下,主要几个问题:
1.数据存在本地
2.数据修改需要上传到服务器
3.上传服务器时,用户多 服务器压力会不会很大
第一个问题不用说,超简单的
第二个问题,你在本地多一张表,这张表存放你对数据的操作记录,删除了哪条,增加了哪条都在这张表里能查到
然后写好上传代码。在有网情况下将操作记录发给服务器。
第三个问题,不是服务器压力大,是数据库压力大。数据库和服务器能提供多少连接是固定的,服务器处理数据时非常快,但数据库就没那没么理想了。那么就有两种方法。
1.数据库读写分离
2.消息队列来异步处理。当然,用简单的列表来做异步也是可以,后台写一个处理的程序来消费列表里面的操作记录。
你好,非常喜欢你这么清晰的回答,但是这里还有好多小细节要处理。
1. 现有数据库这种操作太多了,一个一个的添加太麻烦,由于开发人员的写法不同,有些使用的是原生态的写法,有些直接写SQL语句,导致没一个好的标准来处理操作记录。 在这里找到了触发器,不知道是否可以解决这个问题,我在http://sqlite-sync.com/ 看到了这个希望。 (目前来说唯一的希望了额)
2. 删除,新增这俩个非常好处理,但是更新操作,想精简点,实在是自家的服务器,每一分资源都要好好利用。
不知有没有更好的思路,仍在查找答案中。
@Nice_cj_com: 同样的,你程序的层次架构应该分明,业务层做什么,数据层做什么。
业务层负责业务逻辑处理,里面不可以出现一句SQL代码
数据层再来做SQL拼接。
我的意思能明白?就是增删改,在业务层,都是数据对象,没有SQL的关系。所有需要进入数据库的操作都交给数据层来做。
就这个问题,你本地存的记录,应该是这样子的
时间|操作类型|ID|数据内容json
这样服务器取到之后,增删改业务都很明确。并且,在服务器接收了操作记录就清空本地操作记录或者标记,下次不再提交以前的记录。
触发器在这个问题上面并没有好的利用之地。
另外,你这个项目是维护,还是还没开发?
@盟怀部孩: 你好,属于升级维护,老系统了,数据层代码多,有80个Activity,而且纯DB开发的库存系统,一个一个的在原有的基础上添加操作记录实在是不合理。现在就这一个问题,怎么添加操作记录了。
@Nice_cj_com: 升级维护就蛋疼了。可能你前期没有设计好架构。
添加操作记录问题也不大,只是本地行为。相当新增了一个接口功能而已。服务器只要提供一个处理这些操作记录的服务即可,就是这个提供服务的怎么做处理会让你蛋疼些。
@Nice_cj_com:
还有另一个思路
APP上面比较简单,只是在修改数据的时候加个记录,将SQL串记录下来就可以。
然后将SQL串提交给服务器,让服务器来处理这些SQL
@盟怀部孩: 你好,这个Sqlite和Mysql不大一致,需要转换,而且考虑到未来的拓展性,也有可能换Oracle,MongDB这样的,还是在本地做,在发送数据给服务器之前需要筛选掉一些东西,总的来说现在一个问题了,那就是如何在这老的系统做一个接口来进行添加操作行为了。 谢谢你 :)
@Nice_cj_com: 不客气,祝你早日实现功能,运行正常,老板赏识,步步高升,迎娶百富美,出任CEO,走向人生巅峰
做本地缓存技术,可以看看DiskLruCache
app所有的操作数据都存在Sqlite里面,隔一段时间进行上传,只上传改变的部分,缓存的话不知道怎么实现,说说简单的思路。
Sqlite 定时上传数据到服务器,服务器通过时间判断上传的数据是否最新,是则更新服务器数据,否则忽略
你好,这里有个问题,考虑到客户端有点多,这样做会导致服务器压力很大。
@Nice_cj_com: 那上消息队列,数据排队进来
@大佬辉: 你好,那如何上传那些修改的数据呢,还有,如何删除掉的数据如何上传提示服务器删除呢?
@Nice_cj_com: 本地做一个中间表存储,通知服务器删除那个表的哪些主键
新增编辑同理,注意加上时间,好与服务器的数据里面的时间对比
@大佬辉: 你好,在旧有的基础上,原来每个删除,新增,编辑操作都需要这样额外添加一条SQL语句,同样在新增和编辑时需要将本地数据发送到服务器做对比,这样做会不会很耗时,我总觉得思路应该是有一个基于数据库层的类似于JavaEE的AOP,在中间做拦截和分析,将那一部分改动的数据上传到数据库中,这样精准又不会修改现有的代码。
@Nice_cj_com: 原理都差不多,都是传数据,对比及处理
@大佬辉: 你好,触发器可以解决这样的问题吗?我对这个不是很了解
@Nice_cj_com: 不建议用,会死锁
@大佬辉: 你好,那关于底层的C调用,这方面研究怎么样?
@Nice_cj_com: 暂无
@大佬辉: 谢谢你 :)