#求助 |  Java 并发编程 | 数据结构 | 请各位指点一二

2019-12-02 14:49:09 +08:00
 Ky1inZhang

前情提要。

本人搬砖阶段菜鸟一只,打算私下写个小程序,好吧仅仅只是打算。用我能会的捋一遍先。

小程序粗略计算十个页面够了,查查 UI 框架用原生写。后台接口用 spring boot,然后 mybatis,mysql 一套,虽然感觉 mysql 也挺沉的,我只有薅羊毛的谷歌云。

已知:我有四个值,两个单位人和次。

A 人,(10 ~ 100)* A 次,

B 人,(10 ~ 100)* B 次,

* 预期是 A≤B,但数据初期四个值不可预期。

A 人的 1 次和 B 人的 1 次存在抵消或者兑换关系。

上面说的可能有些复杂,我觉得像是抢车票或者秒杀。但是又太笼统了。我这也不是搞秒杀,只是考虑一定会有并发,或者说主要是分配问题。

两个问题==+*+==## | 下面三段我精分了

1.抢车票用多程模拟的话就是锁住票。 然后我上面的需求,不是多个人抢票,而是多个人抢多个人的票,多了对应关系,人的次数要拆分抵消掉。不是为了抢而抢,而为了节省资源,抢占的分配。想到这里我就不会了,感觉是要往分段和队列方向靠。思维上有点不明朗。想都想不通别说写了。

简单来说就是 20×30 抵消掉 30×20,怎么不浪费资源不阻塞且效率的运行,这四个数字还是在动态变化的。

这段我想想又变了,好像用 ConcurrentLinkedQueue 就可以? 虽然我想象的是两方面对冲,但实际上我只能保证单方面出来的结果,对结果排序,实际的执行还是整体看做抢票行为,我想要剥离出来的人向量被忽略掉了。

2.数据的存储形式,每次的变化肯定是 1 次。

1).我本来打算用拉链表记录变化值 1,然后 sum 出某天的值,这样还可以出历史记录,但这样总的次数就要全表 sum 了,不科学,所以我想再出一张表存当天的结果。

2).如果不用拉链表记录 1 次的变化值,那么操作修改一个人的次数值字段,就要不停的访问数据库,感觉会冲突或者锁住,也很浪费资源。能不能程序里处理好然后分段提交到数据库,这就又回到开始的并发问题了。

总结一下问题,Java 的并发,Java 和数据库的数据结构。 希望各位大佬能指示一下方向或提点一些关键字。

1143 次点击
所在节点    程序员
1 条回复
crclz
2019-12-02 23:42:51 +08:00
应用程序状态应该放在数据库里面,而不是应用程序。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/625088

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX