关于laravel的数据库操作的一些想法
想法的产生是因为确实有这样的需求,而且还不少,需求就是接口不能同步更新DB,要异步,所以能不能让官方实现支持ORM相关更新方法的异步支持,或者有没有类似的包?比如:
//异步
User::query()->create()->async();
User::query()->insert()->async();
User::query()->insertGetId()->async();
User::query()->updateOrCreate()->async();
User::query()->upsert()->async();
...
我们以前的做法就是生成sql,直接丢到队列里跑!所以按理这个应该很好实现,奈何看不懂源码,写不出这样的一个包!
要不就用swoole 要不就丢队列吧
swoole(laravel-s/ Octane) 或队列
感觉这样会方便些
你可以去用国产高性能框架,号称大道至简、十年磨一剑、专为 API 开发而发布的框架
ThinkPHP
。PS
只负责推荐,如果你用了什么问题别跟别人说是我推荐的。
根据你目前的问题,最优解是 事件(OR || &&) queue,可以用事件触发 queue,也可以直接推进 queue 处理。 如果真的有这个需求,建议做客制化开发或者提交 PR。 温馨建议: 建议把
async()
调用放在create update ...
等函数的前面用这玩意包一下:
我记得应该可以写个command 然后exec在后台执行吧,你这个不能同步的原因是什么,是更新慢,不想让用户等待么?
异步设计有很多种工具实现, 但是数据库ORM设计跟它是两个东西,为什么要耦合在一起呢?
我觉得对数据的异步操作可能没有这么简单,比如需要考虑到数据一致性和事务操作。常见的做法还是写个
Job
推到队列里去消费。