婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 利用Redis實現SQL伸縮的方法簡介

利用Redis實現SQL伸縮的方法簡介

熱門標簽:隨州營銷電話機器人怎么樣 機器人電話機創意繪畫 400電話申請怎么看 400電話從哪里申請濱州 高德地圖標注商家在哪 江西南昌百應電話機器人 杭州400電話如何申請的 hbuilder地圖標注 天音通信電話機器人

緩解行競爭

我們在Sentry開發的早起采用的是sentry.buffers。 這是一個簡單的系統,它允許我們以簡單的Last Write Wins策略來實現非常有效的緩沖計數器。 重要的是,我們借助它完全消除了任何形式的耐久性 (這是Sentry工作的一個非常可接受的方式)。

操作非常簡單,每當一個更新進來我們就做如下幾步:

  •     創建一個綁定到傳入實體的哈希鍵(hash key)
  •     使用HINCRBY使計數器值增加
  •     HSET所有的LWW數據(比如 "最后一次見到的")
  •     用當前時間戳ZADD哈希鍵(hash key)到一個"掛起" set

現在每一個時間刻度 (在Sentry中為10秒鐘) 我們要轉儲(dump)這些緩沖區并且扇出寫道(fanout the writes)。 看起來像下面這樣:

  •     使用ZRANGE獲取所有的key
  •     為每一個掛起的key發起一個作業到RabbitMQ

現在RabbitMQ作業將能夠讀取和清除哈希表,和“懸而未決”更新已經彈出了一套。有幾件事情需要注意:

  •     在下面我們想要只彈出一個設置的數量的例子中我們將使用一組排序(舉例來說我們需要那100個舊集合)。
  •     假使我們為了處理一個鍵值來結束多道排序的作業,這個人會得到no-oped由于另一個已經存在的處理和清空哈希的過程。
  •     該系統能夠在許多Redis節點上不斷擴展下去僅僅是通過在每個節點上安置把一個'懸置'主鍵來實現。

我們有了這個處理問題的模型之后,能夠確保“大部分情況下”每次在SQL中只有一行能夠被馬上更新,而這樣的處理方式減輕了我們能夠預見到的鎖問題。考慮到將會處理一個突然產生且所有最終組合在一起進入同一個計數器的數據的場景,這種策略對Sentry用處很多。

速度限制

出于哨兵的局限性,我們必須終結持續的拒絕服務攻擊。我們通過限制連接速度來應對這種問題,其中一項是通過Redis支持的。這無疑是在sentry.quotas范圍內更直接的實現。

它的邏輯相當直接,如同下面展示的那般:

 

def incr_and_check_limit(user_id, limit):
  key = '{user_id}:{epoch}'.format(user_id, int(time() / 60))
 
  pipe = redis.pipeline()
  pipe.incr(key)
  pipe.expire(key, 60)
  current_rate, _ = pipe.execute()
 
  return int(current_rate) > limit

我們所闡明的限制速率的方法是 Redis在高速緩存服務上最基本的功能之一:增加空的鍵字。在高速緩存服務中實現同樣的行為可能最終使用這種方法:
 

def incr_and_check_limit_memcache(user_id, limit):
  key = '{user_id}:{epoch}'.format(user_id, int(time() / 60))
 
  if cache.add(key, 0, 60):
    return False
 
  current_rate = cache.incr(key)
 
  return current_rate > limit

事實上我們最終采取這種策略可以使哨兵追蹤不同事件的短期數據。在這種情況下,我們通常對用戶數據進行排序以便可以在最短的時間內找到最活躍用戶的數據。

基本鎖

雖然Redis的是可用性不高,我們的用例鎖,使其成為工作的好工具。我們沒有使用這些在哨兵的核心了,但一個示例用例是,我們希望盡量減少并發性和簡單無操作的操作,如果事情似乎是已經在運行。這對于可能需要執行每隔一段時間類似cron任務非常有用,但不具備較強的協調。
在Redis的這樣使用SETNX操作是相當簡單的:
 

from contextlib import contextmanagerr = Redis()@contextmanagerdef lock(key, nowait=True):
  while not r.setnx(key, '1'):
    if nowait:
      raise Locked('try again soon!')
    sleep(0.01)
 
  # limit lock time to 10 seconds
  r.expire(key, 10)
 
  # do something crazy
  yield
 
  # explicitly unlock
  r.delete(key)

而鎖()內的哨兵利用的memcached的,但絕對沒有理由我們不能在其切換到Redis。

時間序列數據

近來我們創造一個新的機制在Sentry(包含在sentry.tsdb中)存儲時間序列數據。這是受RRD模型啟發,特別是Graphite。我們期望一個快速簡單的方式存儲短期(比如一個月)時間序列數,以便于處理高速寫入數據,特別是在極端情況下計算潛在的短期速率。盡管這是第一個模型,我們依舊期望在Redis存儲數據,它也是使用計數器的簡單范例。

在目前的模型中,我們使用單一的hash map來存儲全部時間序列數據。例如,這意味所有數據項在都將同一個哈希鍵擁有一個數據類型和1秒的生命周期。如下所示:

 

復制代碼 代碼如下:

{
    "type enum>:epoch>:shard number>": {
        "id>": count>
    }}


因此在這種狀況,我們需要追蹤事件的數目。事件類型映射到枚舉類型"1".該判斷的時間是1s,因此我們的處理時間需要以秒計。散列最終看起來是這樣的:

復制代碼 代碼如下:
 
{
    "1:1399958363:0": {
        "1": 53,
        "2": 72,
    }}

一個可修改模型可能僅使用簡單的鍵并且僅在存儲區上增加一些增量寄存器。

  

復制代碼 代碼如下:
"1:1399958363:0:1": 53

我們選擇哈希映射模型基于以下兩個原因:

  1.     我們可以將所有的鍵設為一次性的(這也可能產生負面影響,但是目前為止是穩定的)
  2.     大幅壓縮鍵值,這是相當重要的處理

此外,離散的數字鍵允許我們在將虛擬的離散鍵值映射到固定數目的鍵值上,并在此分配單一存儲區(我們可以使用64,映射到32個物理結點上)


現在通過使用 Nydus和它的map()(依賴于一個工作區)(),數據查詢已經完成。這次操作的代碼是相當健壯的,但幸好它并不龐大。

 

def get_range(self, model, keys, start, end, rollup=None):
  """  To get a range of data for group ID=[1, 2, 3]:  Start and end are both inclusive.  >>> now = timezone.now()  >>> get_keys(tsdb.models.group, [1, 2, 3],  >>>     start=now - timedelta(days=1),  >>>     end=now)  """
  normalize_to_epoch = self.normalize_to_epoch
  normalize_to_rollup = self.normalize_to_rollup
  make_key = self.make_key
 
  if rollup is None:
    rollup = self.get_optimal_rollup(start, end)
 
  results = []
  timestamp = end
  with self.conn.map() as conn:
    while timestamp >= start:
      real_epoch = normalize_to_epoch(timestamp, rollup)
      norm_epoch = normalize_to_rollup(timestamp, rollup)
 
      for key in keys:
        model_key = self.get_model_key(key)
        hash_key = make_key(model, norm_epoch, model_key)
        results.append((real_epoch, key, conn.hget(hash_key, model_key)))
 
      timestamp = timestamp - timedelta(seconds=rollup)
 
  results_by_key = defaultdict(dict)
  for epoch, key, count in results:
    results_by_key[key][epoch] = int(count or 0)
 
  for key, points in results_by_key.iteritems():
    results_by_key[key] = sorted(points.items())
  return dict(results_by_key)

歸結如下:

  •     生成所必須的鍵。
  •     使用工作區,提取所有連接操作的最小結果集(Nydus負責這些)。
  •     給出結果,并且基于指定的時間間隔內和給定的鍵值將它們映射到當前的存儲區內。

簡單的選擇

我是一個喜歡用簡單的方案解決問題的人,在這個范疇里使用Redis無疑是很適合的。它的文檔是那樣讓人驚訝,那是因為(閱讀)其文檔的門檻非常的低。雖然他也有折衷(主要是如果你使用持久化),但是他們工作地很好并且比較直觀。

那么Redis為您解決什么問題呢?

您可能感興趣的文章:
  • Redis的11種Web應用場景簡介
  • 簡介Lua腳本與Redis數據庫的結合使用
  • 簡介Redis中的showlog功能
  • 在Node.js應用中使用Redis的方法簡介
  • Redis教程(一):Redis簡介
  • NoSQL和Redis簡介及Redis在Windows下的安裝和使用教程
  • Redis簡介

標簽:鶴崗 石嘴山 常德 葫蘆島 招商 沈陽 保定 昆明

巨人網絡通訊聲明:本文標題《利用Redis實現SQL伸縮的方法簡介》,本文關鍵詞  利用,Redis,實現,SQL,伸縮,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《利用Redis實現SQL伸縮的方法簡介》相關的同類信息!
  • 本頁收集關于利用Redis實現SQL伸縮的方法簡介的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美性色黄大片| 洋洋av久久久久久久一区| 国产不卡视频在线播放| 欧美高清性hdvideosex| 亚洲成a人片综合在线| 91麻豆精品国产91久久久使用方法| 国产露脸91国语对白| 欧美高清视频不卡网| 欧美日韩一区在线| 一区二区三区久久| 精品国产乱码久久久久久久| 亚洲成人免费视| 国产精品乱码一区二区三区软件 | 国产精品一区一区| 视频在线在亚洲| 暴力调教一区二区三区| 欧美日韩精品一区二区天天拍小说| 欧美成人女星排名| 欧美国产精品一区| 国产目拍亚洲精品99久久精品| 亚洲国产精品精华液2区45| 国产成人在线观看免费网站| 亚洲午夜羞羞片| 国产精品 欧美精品| 欧美电影一区二区| 欧洲国内综合视频| 国产精品一级片在线观看| 91老师片黄在线观看| 丁香六月久久综合狠狠色| 久久福利资源站| 日韩av电影一区| 日韩二区三区四区| 日本少妇一区二区| 美女精品自拍一二三四| 日本午夜一本久久久综合| 免费高清视频精品| 久久精品国产精品亚洲精品 | 亚洲在线观看免费视频| 91麻豆精品国产| 久久久久97国产精华液好用吗| 亚洲情趣在线观看| 卡一卡二国产精品 | 在线成人av网站| 国产精品国产馆在线真实露脸 | 国产精品人妖ts系列视频| 亚洲高清免费一级二级三级| caoporn国产一区二区| 亚洲精品日日夜夜| 久草热8精品视频在线观看| 欧美日韩激情一区二区三区| 国产精品的网站| 成人精品gif动图一区| 久久网这里都是精品| 日本欧美一区二区三区| 91黄视频在线| 一个色在线综合| 欧美性色黄大片| 日韩国产精品大片| 日韩美女一区二区三区| 久久电影网站中文字幕| 欧美三级韩国三级日本三斤| ...av二区三区久久精品| 欧美久久免费观看| 亚洲视频一区二区在线观看| 久久亚洲综合色一区二区三区| 在线观看日韩精品| 不卡一区中文字幕| 日本一区二区视频在线| 欧美一区二区观看视频| 欧美挠脚心视频网站| 在线观看日韩精品| 日本久久精品电影| 色偷偷一区二区三区| 91香蕉视频黄| 欧洲另类一二三四区| 国产91在线|亚洲| 风间由美一区二区三区在线观看 | 日本韩国欧美国产| 玉足女爽爽91| 欧美午夜片在线观看| 国产精品一区二区在线观看网站| 夜夜嗨av一区二区三区四季av | 欧美日韩国产三级| 大桥未久av一区二区三区中文| 午夜不卡av免费| 亚洲欧美福利一区二区| 国产亚洲污的网站| 国产亚洲欧洲一区高清在线观看| 粉嫩久久99精品久久久久久夜| 亚洲天堂网中文字| 蜜臀99久久精品久久久久久软件| 青草国产精品久久久久久| 亚洲超丰满肉感bbw| 亚洲女同女同女同女同女同69| 欧美日韩成人在线一区| 精品少妇一区二区三区视频免付费| **欧美大码日韩| 91精品久久久久久久91蜜桃| 91麻豆产精品久久久久久 | 精品欧美一区二区久久| 91亚洲永久精品| 成人午夜激情影院| 国产精品亚洲а∨天堂免在线| 精品一区二区免费| 日韩精品成人一区二区在线| 日韩精品乱码av一区二区| 日本伊人午夜精品| 国产高清视频一区| 色婷婷久久久久swag精品| 欧美一级专区免费大片| 欧美日韩精品久久久| 日韩一级精品视频在线观看| 中文字幕欧美区| 亚洲一区二区欧美日韩| 亚洲成人免费在线| 国产一区啦啦啦在线观看| 成人av网站在线观看免费| 在线观看欧美精品| 精品国产乱码久久久久久牛牛| 国产精品盗摄一区二区三区| 日韩欧美视频一区| 国产精品视频免费| 乱一区二区av| 日本一区中文字幕| 国产精品一级片在线观看| 在线观看av一区| 国产精品免费久久久久| 麻豆精品在线播放| **性色生活片久久毛片| 国产在线精品视频| 久久这里只精品最新地址| 日本aⅴ免费视频一区二区三区| 丁香激情综合五月| 久久久久久久久久电影| 国产精品99久久久久久似苏梦涵 | 免费看日韩a级影片| 欧美在线播放高清精品| 亚洲午夜成aⅴ人片| 日韩欧美成人一区| 成人小视频免费观看| 亚洲天堂2014| 日韩小视频在线观看专区| 国产在线不卡视频| 五月婷婷综合在线| 精品少妇一区二区三区在线视频| 国产成人午夜99999| 亚洲制服丝袜在线| 日韩三级高清在线| 97se亚洲国产综合自在线| 久久99热国产| 亚洲午夜精品17c| 国产精品丝袜一区| 337p粉嫩大胆色噜噜噜噜亚洲| 成人的网站免费观看| 精品一区二区三区欧美| 亚洲资源中文字幕| 中文一区二区在线观看| 精品日韩在线观看| 欧美日韩国产bt| 色婷婷综合五月| 97久久人人超碰| 成人午夜免费av| 国产资源在线一区| 国产精品久久777777| 国产精品色呦呦| 国产精品进线69影院| 亚洲人成电影网站色mp4| 亚洲欧美偷拍三级| 亚洲一卡二卡三卡四卡 | 亚洲一区二区三区小说| 亚洲综合小说图片| 亚洲v精品v日韩v欧美v专区| 亚洲欧美另类在线| 亚洲综合精品自拍| 日韩激情av在线| 日韩不卡一二三区| 国产v综合v亚洲欧| 97久久超碰国产精品| 99国产精品久久久| 欧美性猛交xxxxxx富婆| 欧美一区日本一区韩国一区| 日韩欧美一区电影| 一区二区中文视频| 久久久久99精品国产片| 亚洲免费av高清| 蜜臂av日日欢夜夜爽一区| 欧美一三区三区四区免费在线看 | 婷婷一区二区三区| 精品伊人久久久久7777人| 国产一区二区三区四区五区入口| 成人免费视频一区二区| 日韩电影在线免费看| 日韩毛片在线免费观看| 欧美激情一区不卡| 91亚洲永久精品| 国产精品亚洲成人| 国产乱淫av一区二区三区| 美国欧美日韩国产在线播放| 国产精品情趣视频| 国产色产综合产在线视频|