https://segmentfault.com/a/11...
url後面的1190000000490733是怎麼實現的,以及這種方式的好處
https://segmentfault.com/a/11...
url後面的1190000000490733是怎麼實現的,以及這種方式的好處
這就是你要的答案
http://segmentfault.com/q/1010000000142374
以下答案全是猜測,如有雷同,純屬巧合!
有一個類似全域發號器的服務,依照固定的系統規則進行發號
前三位是預留的給系統模組用標識符,例如101是問答,119是文章,筆記是133,職位是128,活動是116,收藏夾是123等等或許還有其他模組
接著後面13位相當於預留了萬億資料量,對系統內產生的所有模組所有資料統一做自增
好處是:
1.方便資料庫依模組分庫、分錶、分散式等部署
2.方便進行服務化架構
3.給遞歸採集全棧資料一定的門檻
4.隱藏某個模組的實際資料量
5.透過ID前三位快速知道這個資料屬於哪個模組
6.應該還有...
a應該代表article,你這個網址就代表查看ID為1190000000490733的文章。這種ID是有一些隨機產生規則的,目的就是防止使用者去猜,防止爬蟲去抓。你要是1,2,3,4,5這種整數連著往後排,別人就好猜了
很像RESTful接口,讀讀RESTful API 設計指南這篇文章就知道RESTful規範的好處了,更合理地使用了http動作,讓接口變得很清晰。
至於實現方式,只要保證產生唯一id就可以實現了吧。
可以使用mysql的uuid_short這個函數產生uuid。當然sf也可以自己自訂規則或是使用php的生成uuid的函數實作。
測試了一下,發現這個id是不連續的。猜測應該是一個支援分部署的id生成服務產生的id。
<code>https://segmentfault.com/a/1190000000490733 https://segmentfault.com/q/1010000006600460</code>
文章;問題;評論估計都是用的這一個id生成服務,所以,直接將某個id+1,是訪問不到數據的。
之所以使用這種分散式的id生成器,是