高朋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實用程式進行基準測試。
相關文章
- 查詢表空間是否具備自動擴充套件空間套件
- 擴充套件表空間套件
- ubuntu 擴充套件磁碟空間Ubuntu套件
- 使用命令擴充套件vmdk磁碟空間套件
- 如何擴充套件一個網站以支援數百萬使用者?套件網站
- mysql空間擴充套件 VS PostGISMySql套件
- 擴充套件邏輯卷空間套件
- 表空間自動擴充套件 AUTOALLOCATE 的擴充套件規律套件
- oracle UNDO表空間一個bug——undo表空間快速擴充套件Oracle套件
- in_list查詢與or擴充套件套件
- Linux擴充套件LVM空間Linux套件LVM
- HP-UX擴充套件swap空間UX套件
- HP-UNIX擴充套件/tmp空間套件
- 擴充套件系統的磁碟空間套件
- 使用Go語言每分鐘處理一百萬個請求Go
- redis高可用強擴充套件的叢集方案Redis套件
- Mybatis之map操作使用者和模糊查詢擴充套件MyBatis套件
- 在EF Core 中使用AsQueryable擴充套件方法的拼接查詢套件
- 使用Go語言每分鐘處理1百萬請求Go
- php7安裝redis擴充套件和memcache擴充套件PHPRedis套件
- 擴充套件c盤空間有什麼辦法套件
- [10] 名稱空間擴充套件和鏈式呼叫套件
- VirtualBox下Linux(centos)擴充套件磁碟空間LinuxCentOS套件
- Oracle 10g 物理DataGuard擴充套件表空間Oracle 10g套件
- 表空間無法擴充套件問題處理套件
- 虛擬磁碟空間滿後的擴充套件方法套件
- Linux 虛擬機器擴充套件磁碟空間Linux虛擬機套件
- linux建立新分割槽擴充套件磁碟空間Linux套件
- MySQL 高擴充套件架構構建百萬線上系統實踐MySql套件架構
- PostgreSQL空間切割(st_split)功能擴充套件-空間物件網格化SQL套件物件
- 並查集擴充套件並查集套件
- PHP安裝redis擴充套件PHPRedis套件
- php8.2 redis擴充套件PHPRedis套件
- Redis 實戰 —— 13. 擴充套件 RedisRedis套件
- MAC XAMPP 整合使用Redis 及 安裝php redis擴充套件MacRedisPHP套件
- enqueue HW wait 引起表空間突然大量擴充套件ENQAI套件
- 【UNDO】Oracle undo表空間使用率過高,因為一個查詢Oracle
- php安裝redis擴充套件及操作redisPHPRedis套件