顯示具有 NoSQL 標籤的文章。 顯示所有文章
顯示具有 NoSQL 標籤的文章。 顯示所有文章

2012/06/07

社交網路設計:在地圖中找尋附近的人

很多社交網路App都會用到地圖,以自己為中心,找尋附近的店家、朋友等等。
用程式的邏輯來表達就是:
以 (x, y) 座標為中心,找尋方圓 n 公里以內的點

資料庫不外乎就是儲存經緯度 (longitude, latitude)
-----------------------------
 id | lat       | lng
----+-----------+------------
 1  | 25.151000 | 121.549000
 2  | 25.010000 | 121.574000
 3  | 25.070000 | 121.589000


今天我想找 User1 附近 10km 以內的人
方法一
來看"距離"跟"經緯度"的關係是什麼,從 Decimal degrees - Wikipedia 知道,其實他們並非線性的關係,而是一堆三角函數算出來的,因為隨著緯度越高,單位經緯度所對應的距離就越短。從 別搗蛋 歸納出的對應表:
台灣地區:
兩地經緯度相差 0.5度:距離相差約 50公里
兩地經緯度相差 0.1度:距離相差約 10公里
兩地經緯度相差 0.05度:距離相差約 5公里
兩地經緯度相差 0.01度:距離相差約 1公里

2012/05/10

Redis 初試

Redis
是一種 key-value 的 storage,可以想成進階版的 memcached,它提供了更多種 data structure 與 operator。它不再只是一個儲存體,更能做一些邏輯運算,之前很多要在 client 端做的事情,都可以在 redis server 處理掉。
和其他 NoSQL 相比,資料儲存在 memory,存取速度超快,但也因此儲存空間會受限在 memory size,雖然支援分散式 (Master-Slave),但每個 node 都是一個映射,也就是儲存一模一樣的資料,所以什麼該放在 redis 也是需要仔細想過。它不是完全用來取代 database,而是針對經常存取、較複雜運算的部份再派它上場。

這三篇推薦看一下

這三份文件也可以看