java - id号应该在服务器端自增还是页面端?
PHPz
PHPz 2017-04-18 10:29:35
0
3
403

论坛每个帖子都有一个id号,从1开始增长,每新增一个帖子,id增1
假设帖子有三项,id,文本和时间

在后端,设计一个类Article,类里就有三项:id, text, time

现在这个id增长有两种思路:
1) 利用数据库自增,id设为主键,启动数据库自增
2) 页面帖子前,利用ajax请求,取得数据库当前最大号maxid,然后帖子的id设为maxid+1

2)的思路在高并发的时候有问题,有可能多人同时发帖从而ajax请求获得同样的id,然后他们的帖子都是id+1

但是如果是1),那么提交帖子的时候,帖子数据只有两项,text和time
这样的话,后端可能就要设计两个类
一个Article有三项,id, text, time,另一个只ArticleWithoutID有两项 text, time
因为前端用户如果查看帖子,那么后端就要返回id, text, time三项了
但是要设计两个类,又感觉怪怪的

大家怎么看?

PHPz
PHPz

学习是最好的投资!

모든 응답(3)
巴扎黑

서버 측에서 증가해야 합니다. 그렇지 않으면 충돌이 발생할 수 있습니다.
가장 큰 것을 가져갔는데도 왜 여전히 갈등이 발생하는지 물으실 수 있습니다. 데이터베이스에 잠금 개념이 있는 이유를 알고 있다면 여기서 혼동하지 않을 것입니다.
동시성이 클 경우 동시에 획득한 최대 ID가 될 수 있습니다. 제출 시 차례로 제출이 실패할 수 있습니다.
또한, 프론트엔드 데이터는 위조될 수 있습니다. 프로그래머로서 프론트엔드 데이터에 대해 의심하고 검증해야 합니다

PHPzhong

관계형 데이터베이스는 자동 증가 필드를 설정할 수 있으며, 데이터를 입력할 때 이를 지정할 필요가 없습니다.

阿神

id 데이터베이스가 자동으로 증가할 것은 확실하고, 동시성이 자동으로 증가하면 프론트엔드가 반드시 종료된다는 점에는 의심의 여지가 없습니다. 필요에 따라 클래스를 통해 완벽하게 처리할 수 있으며 그다지 복잡하지 않습니다. (자체 증가 ID 솔루션은 좋지 않으며 높은 동시성을 위해 권장되지 않습니다.)
1. 프런트 엔드는 텍스트와 시간을 포함하여 기사 개체를 서버로 보냅니다.
2. 서버는 이 개체를 데이터베이스에 저장하고 데이터베이스는 자동으로 증가하여 ID를 생성합니다. 데이터베이스 측에 동시 처리가 있습니다.
3. 입금 성공 후 전체 데이터 또는 ID를 프런트 엔드로 반환할 수 있습니다.
4. 프런트엔드는 성공 메시지를 받은 후 현재 게시물을 목록에 표시합니다. 이 시점에서 해당 게시물의 ID를 획득하였고, 해당 ID를 기준으로 조회가 가능하다.

====

데이터베이스 측의 높은 동시성으로 인해 자동 증가 문제로 인한 성능 손실이 발생하지 않도록 프런트 엔드에서 임의 ID를 생성하는 것이 좋습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿