高朋Groupon使用 Redis 每分鐘擴充套件數百萬個地理空間查詢
為了讓高朋Groupon使用者附近找到相關的交易,需要進行大量的地理空間搜尋。這些搜尋是在地理空間實體上執行的,例如郵政編碼、時區、社群或興趣點。每分鐘以低延遲提供數百萬次查詢需要高效的空間索引器進行最佳化。
本文介紹了 Groupon 如何使用 Redis 來支援兩種主要型別的地理空間搜尋 - 查詢最近的實體和查詢半徑內所有附近的實體。我們還將瞭解 Redis 叢集如何提供可擴充套件和高效能的解決方案。
Redis 提供了GEOADD、GEORADIUS、GEORADIUSBYMEMBER、GEOSEARCH和GEOSEARCHSTORE等命令,用於地理空間索引和搜尋。空間實體儲存在排序集中,座標使用Geohash技術形成 52 位整數。
為什麼要使用Redis?
有很多解決方案可用於實現空間搜尋。Quadtree、R-tree 和 Kd 樹等資料結構可用於索引實體。S2 和 H3 等地理空間索引器可用於類似的查詢。
但是,Redis 在可擴充套件性、效能和可用性方面具有優勢。與其他解決方案相比,Redis 有幾個優勢:
1. 可擴充套件性
從時間複雜度可以看出,隨著地理資料量的增加,命令執行的時間也會增加。使用的記憶體也必然會增加。在這種情況下,Redis 叢集可以隨著資料量的變化而擴充套件。
Redis 叢集有兩種擴充套件方式——水平擴充套件和垂直擴充套件。
- 水平擴充套件允許在叢集中新增或刪除節點(分片)。即使在重新分片期間,叢集也會繼續為請求提供服務,同時擴充套件/縮小。
- 垂直擴充套件允許在為請求提供服務時更改節點的大小以進行向上/向下擴充套件。
2. 高可用
Redis 叢集透過複製提供高可用性。主節點可以跨物理機架(或資料中心)配置多個副本。Redis 叢集也支援自動故障轉移。
3. 效能
Redis 是一種記憶體資料儲存,其資料結構針對效能進行了最佳化。但是,在對地理空間查詢的效能進行基準測試和調整時,需要牢記以下幾點:
- GEOADD 和 GEORADIUS 命令的時間複雜度分別為 O(log(N)) 和 O(N + log(M))。保持金鑰大小小並且資料分割槽是很重要的,以避免任何單個節點過載。半徑的增加會導致命令執行時間增加。
- 客戶端使用 TCP 連線與 Redis 伺服器通訊。客戶端套接字處於非阻塞狀態,因為 Redis 使用多路複用和非阻塞 I/O。應啟用 TCP Keepalive 以進行效能調整。Keepalive 是一種允許使用相同的 TCP 連線而不是為每個新請求開啟一個新連線的方法。
- 水平擴充套件允許鍵分佈在分片上,並透過減少每個分片的負載來提高效能。
- 如果啟用了Redis叢集模式,則不需要RDB持久化和AOF。
- 預設情況下,Redis 允許 10,000 個客戶端連線,並且可以進行配置。
- Redis 命令的效能可以使用redis-benchmark實用程式進行基準測試。
相關文章
- Linux擴充套件LVM空間Linux套件LVM
- ubuntu 擴充套件磁碟空間Ubuntu套件
- 如何擴充套件一個網站以支援數百萬使用者?套件網站
- linux建立新分割槽擴充套件磁碟空間Linux套件
- 在EF Core 中使用AsQueryable擴充套件方法的拼接查詢套件
- Mybatis之map操作使用者和模糊查詢擴充套件MyBatis套件
- 擴充套件c盤空間有什麼辦法套件
- 並查集擴充套件並查集套件
- vm exsi 擴充套件windows虛擬機器磁碟空間套件Windows虛擬機
- 【UNDO】Oracle undo表空間使用率過高,因為一個查詢Oracle
- Homestead 安裝 Redis 擴充套件Redis套件
- php8.2 redis擴充套件PHPRedis套件
- PHP安裝redis擴充套件PHPRedis套件
- springmvc redis @Cacheable擴充套件(一)SpringMVCRedis套件
- Redis 實戰 —— 13. 擴充套件 RedisRedis套件
- MAC XAMPP 整合使用Redis 及 安裝php redis擴充套件MacRedisPHP套件
- 查詢表空間使用情況
- 表空間使用量查詢
- 使用分割槽助手擴充C盤空間
- Redis 地理空間(geospatial)介紹及應用Redis
- MySQL 高擴充套件架構構建百萬線上系統實踐MySql套件架構
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- php安裝redis擴充套件及操作redisPHPRedis套件
- windchill 擴充USERS表空間
- PHP 操作 Redis 之 phpredis 擴充套件PHPRedis套件
- laragon 新增 PHP_Redis 擴充套件GoPHPRedis套件
- Homestead 安裝 PHP Redis 擴充套件PHPRedis套件
- docker PHP 安裝 Redis 擴充套件DockerPHPRedis套件
- Laragon新增PHP_Redis擴充套件GoPHPRedis套件
- chrome擴充套件推薦:此刻、今天、最近~一個關於時間管理的擴充套件 – MomentumChrome套件
- oracle表空間使用率查詢Oracle
- Oracle 12CR2查詢轉換之表擴充套件Oracle套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 並查集擴充套件應用並查集套件
- PHP擴充套件開發就是一個自己的PHP擴充套件PHP套件
- 擴充套件叢集blk數套件
- 數論分塊擴充套件套件
- 一個簡單的 PHP 時間處理擴充套件PHP套件