99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

試用時間序列數據庫InfluxDB-創新互聯

Hadoop集群監控需要使用時間序列數據庫,今天花了半天時間調研使用了一下最近比較火的InfluxDB,發現還真是不錯,記錄一下學習心得。

創新互聯公司是專業的安定網站建設公司,安定接單;提供網站設計、成都網站建設,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行安定網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!

Influx是用Go語言寫的,專為時間序列數據持久化所開發的,由于使用Go語言,所以各平臺基本都支持。類似的時間序列數據庫還有OpenTSDB,Prometheus等。

OpenTSDB很有名,性能也不錯,但是基于HBase,要用那個還得先搭一套HBase,有點為了吃紅燒肉自己得先去殺豬,燙皮,拔毛的感覺。Prometheus相關文檔和討論太少,而InfluxDB項目活躍,使用者多,文檔也比較豐富,所以先看看這個。Influx可以說是LevelDB的Go語言修改版實現,LevelDB采用LSM引擎,效率很高,Influx是基于LSM引擎再修改的TSM引擎,專為時間序列設計。

InfluxDB 架構原理介紹

LevelDB 架構原理介紹

下午跟七牛的CrazyJVM聊了一下,因為七牛都是用Go,所以也大量部署了Influx給大型企業級用戶使用,據說是全球大的InfluxDB集群,七牛也給Influx提交了大量的Patch,結果Influx通過早期開源弄得差不多穩定了,突然就閉源了,這也太不局氣了,然后搞Cluster功能收費,單機功能免費使用。

昨天看了一會文檔,今天試用了一下,感覺很不錯,值得推薦。把學習了解的內容記錄下來,供愛好者參考,也省的自己時間長忘了。

InfluxDB其實不能說像哪個數據庫,初上手感覺更像Mongo類型的NoSQL,但是有意思的是,它提供了類SQL接口,對開發人員十分友好。命令行查詢結果的界面又有點像MySQL,挺有意思的。

不寫安裝部署和CLI接口,因為實在沒得可寫,直接yum或者apt就裝了。service一啟動,再influx命令就進命令行了,網上一大堆安裝教程

InfluxDB有幾個關鍵概念是需要了解的。

database:相當于RDBMS里面的庫名。創建數據庫的語句也十分相似。一進去就可以先創建一個數據庫玩,加不加分號都行。

CREATE DATABASE 'hadoop'

然后需要創建一個用戶,我省事點,直接創建一個高權限,就看了一天,然后直接寫REST接口去了,權限管理慢慢再細看。

CREATE USER "xianglei" WITH PASSWORD 'password' WITH ALL PRIVILEGES

使用查詢語句插入一條數據

INSERT hdfs,hdfs=adh,path=/ free=2341234,used=51234123,nonhdfs=1234

Influx沒有先建立schema的概念,因為Influx允許存儲的數據是schemeless的,表在這里叫做measurement,數據在插入時如果沒有表,則自動創建該表。

measurement: 相當于RDBMS里面的數據表名。

在上面的INSERT語句中,跟在insert后面的第一個hdfs就是measurement,如果不存在一個叫做hdfs的,就自動創建一個叫做hdfs的表,否則直接插入數據。

然后是tags,tags的概念類似于RDBMS里面的查詢索引名,這里的tags是hdfs=adh和path=/,等于我建立了兩個tags。

free往后統稱叫fields,tags和fields之間用空格分開,tags和fields內部自己用逗號分開。tags和fields名稱可以隨意填寫,主要是一開始設計好就行。

所以,對以上插入語句做一個注釋的話,就是這樣。

INSERT [hdfs(measurement)],[hdfs=adh,path=/(tags)] [free=2341234,used=51234123,nonhdfs=1234(fields)]

然后即可查詢該數據

SELECT free FROM hdfs WHERE hdfs='adh' and path='/'name: hdfs time                    free ----                    ---- 1485251656036494252     425234 1485251673348104714     425234
SELECT * FROM hdfs LIMIT 2name: hdfs time                  free    hdfs    nonhdfs  path   used ----                  ----    ----    -------  ----   ---- 1485251656036494252   425234  adh     1341     /      23412 1485251673348104714   425234  adh     1341     /      23412

這里的where條件,即是上面tags里面的hdfs=adh和path=/,所以tags可以隨意添加,但是在插入第一條數據的時候,最好先設計好你的查詢條件。當然,你插入的任何數據,都會自動添加time列,數了數,應該是納秒級的時間戳。


上面是Influx的基本概念和基本使用的記錄,下面是接口開發的使用。以Tornado示例Restful查詢接口。

Influx本身支持restful的HTTP API,python有直接封裝的接口可以調用,直接 pip install influxdb即可

influxdb-python文檔

Talk is cheap, show me your code.

Models  Influx模塊,用于連接influxdb

class InfluxClient:     def __init__(self):         self._conf = ParseConfig()         self._config = self._conf.load()         self._server = self._config['influxdb']['server']         self._port = self._config['influxdb']['port']         self._user = self._config['influxdb']['username']         self._pass = self._config['influxdb']['password']         self._db = self._config['influxdb']['db']         self._retention_days = self._config['influxdb']['retention']['days']         self._retention_replica = self._config['influxdb']['retention']['replica']         self._retention_name = self._config['influxdb']['retention']['name']         self._client = InfluxDBClient(self._server, self._port, self._user, self._pass, self._db)     def _create_database(self):         try:             self._client.create_database(self._db)         except Exception, e:             print e.message     def _create_retention_policy(self):         try:             self._client.create_retention_policy(self._retention_name,                                                  self._retention_days,                                                  self._retention_replica,                                                  default=True)         except Exception, e:             print e.message     def _switch_user(self):         try:             self._client.switch_user(self._user, self._pass)         except Exception, e:             print e.message     def write_points(self, data):         self._create_database()         self._create_retention_policy()         if self._client.write_points(data):             return True         else:             return False     def query(self, qry):         try:             result = self._client.query(qry)             return result         except Exception, e:             return e.message

連接influxdb的配置從項目的配置文件里讀取,自己寫也行。

Controller模塊InfluxController

class InfluxRestController(tornado.web.RequestHandler):     '''     "GET"         op=query&qry=select+used+from+hdfs+where+hdfs=adh     '''     查詢方法,使用HTTP GET     def get(self, *args, **kwargs):         op = self.get_argument('op')         #自己實現的python switch case,網上一大堆         for case in switch(op):             if case('query'):                 #查詢語句從url參數獲取                 qry = self.get_argument('qry')                 #實例化Models里面的class                 influx = InfluxClient()                 result = influx.query(qry)                 #返回結果為對象,通過raw屬性獲取對象中的字典。                 self.write(json.dumps(result.raw, ensure_ascii=False))                 break             if case():                 self.write('No argument found')     #寫入數據,使用HTTP PUT     def put(self):         op = self.get_argument('op')         for case in switch(op):             if case('write'):                 #data should urldecode first and then turn into json                 data = json.loads(urllib.unquote(self.get_argument('data')))                 influx = InfluxClient()                 #寫入成功或失敗判斷                 if influx.write_points(data):                     self.write('{"result":true}')                 else:                     self.write('{"result":false}')                 break             if case():                 self.write('No argument found')

Tornado配置路由

applications = tornado.web.Application(     [         (r'/', IndexController),         (r'/ws/api/influx', InfluxRestController)     ],     **settings )

JSON項目配置文件

{   "http_port": 19998,   "influxdb":{     "server": "47.88.6.247",     "port": "8086",     "username": "root",     "password": "root",     "db": "hadoop",     "retention": {       "days": "365d",       "replica": 3,       "name": "hound_policy"     },     "replica": 3   },   "copyright": "CopyLeft 2017 Xianglei" }

插入測試

def test_write():     base_url = 'http://localhost:19998/ws/api/influx'     #data = '[{"measurement": "hdfs"},"tags":{"hdfs": "adh","path":"/user"},"fields":{"used": 234123412343423423,"free": 425234523462546546,"nonhdfs": 1341453452345}]'     #構造插入數據     body = dict()     body['measurement'] = 'hdfs'     body['tags'] = dict()     body['tags']['hdfs'] = 'adh'     body['tags']['path'] = '/'     body['fields'] = dict()     body['fields']['used'] = 234123     body['fields']['free'] = 425234     body['fields']['nonhdfs'] = 13414     tmp = list()     tmp.append(body)     op = 'write'     # dict data to json and urlencode     data = urllib.urlencode({'op': op, 'data': json.dumps(tmp)})     headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}     try:         http = tornado.httpclient.HTTPClient()         response = http.fetch(             tornado.httpclient.HTTPRequest(                 url=base_url,                 method='PUT',                 headers=headers,                 body=data             )         )         print response.body     except tornado.httpclient.HTTPError, e:         print e test_write()

插入數據后通過訪問http連接獲取插入結果

curl -i "http://localhost:19998/ws/api/influx?op=query&qry=select%20*%20from%20hdfs" HTTP/1.1 200 OK Date: Tue, 24 Jan 2017 15:47:42 GMT Content-Length: 1055 Etag: "7a2b1af6edd4f6d11f8b000de64050a729e8621e" Content-Type: text/html; charset=UTF-8 Server: TornadoServer/4.4.2 {"values": [["2017-01-24T09:54:16.036494252Z", 425234, "adh", 13414, "/", 234123]], "name": "hdfs", "columns": ["time", "free", "hdfs", "nonhdfs", "path", "used"]}

收工,明天用React寫監控前端

另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前題目:試用時間序列數據庫InfluxDB-創新互聯
分享地址:http://www.yijiale78.com/article20/cdpcco.html

成都網站建設公司_創新互聯,為您提供網站設計公司商城網站響應式網站定制開發靜態網站軟件開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設