主頁 > 資料庫 > 【譯】Clickhouse與LDAP集成(一)

【譯】Clickhouse與LDAP集成(一)

2021-04-01 22:38:42 資料庫

更多精彩內容,請關注微信公眾號:后端技術小屋

原文:https://altinity.com/blog/integrating-clickhouse-with-ldap-part-one
作者:Vitaliy Zakaznikov

ClickHouse上一般使用XML檔案來定義配置,其中包括用戶配置,users.xml檔案或在/etc/clickhouse-server/users.d目錄中的組態檔都可用于定義用戶及其相關屬性,例如profilenetwork restrictionquotapassword,這種方案在集群規模較小時比較有效,但是用來管理大規模集群卻很費勁,主要存在三個主要問題:首先每次必須添加、修改或洗掉用戶時,管理員必須手動編輯這些組態檔;其次,將密碼和哈希值直接存盤在用戶組態檔中存在安全隱患;第三,為用戶分配和管理角色是非常繁瑣的,

ClickHouse現在已經解決了以上三個問題,通過引入對RBAC的支持,ClickHouse允許使用SQL陳述句管理用戶和角色,而無需修改組態檔,但是即使使用RBAC,您仍然需要與組織內的其他服務分別管理用戶和角色,相互之間無法打通,且密碼仍然存盤在檔案系統中,

自2020年中以來,Altinity一直在努力添加ClickHouse對輕型目錄訪問協議(也稱為LDAP)的支持,LDAP集中存盤用戶、密碼及其在組織中角色,從而使得管理用戶和權限的功能集中到一個地方,我們很高興地宣布,ClickHouse支持LDAP身份驗證和用戶目錄的特性已被合入社區,目前運行穩定且通用,我們已使用大多數Linux發行版中提供的常用OpenLDAP軟體包對其進行了仔細的測驗,

在這一系列博客文章中,我們將描述對LDAP集成的新支持如何幫助中大型組織將ClickHouse用戶角色管理與其現有服務集成在一起,我們將介紹LDAP與Clickhouse的幾種不同程度的集成,從使用LDAP驗證ClickHouse用戶,到通過外部用戶目錄完全集成LDAP并將選定的LDAP組映射到RBAC中的角色,

測驗環境

我們使用docker-compose集群來展示LDAP如何與ClickHouse集成,您可以在https://gitlab.com/altinity-public/blogs/ldap-integration-with-clickhouse上找到docker-compose環境,該環境中使用了yandex/clickhouse-server:21.1.2.15鏡像

要使用該環境,需要在系統上安裝gitdockerdocker-compose,然后將包含測驗環境的代碼庫克隆到本地,

git clone https://gitlab.com/altinity-public/blogs/ldap-integration-with-clickhouse.git  

檢查是否可以啟動docker-compose集群,

cd  ldap-integration-with-clickhouse  
cd docker-compose/  
docker-compose up -d  
Creating network "docker-compose_default" with the default driver  
Creating docker-compose_openldap1_1 ... done  
Creating docker-compose_zookeeper_1 ... done  
Creating docker-compose_clickhouse1_1 ... done  
Creating docker-compose_clickhouse3_1 ... done  
Creating docker-compose_clickhouse2_1 ... done  
Creating phpldapadmin                 ... done  
Creating docker-compose_all_services_ready_1 ... done  

如果啟動成功會看到上面的日志,表明openldap1zookeeperclickhouse1clickhouse2clickhouse3phpldapadmin這些服務已經正常運行,我們還可檢查所有服務是否健康,

請注意,您必須執行docker-compose目錄下的所有docker-compose命令

docker-compose ps  
               Name                              Command                  State                   Ports              
-------------------------------------------------------------------------------------------------------------------  
docker-compose_all_services_ready_1   /hello                           Exit 0                                        
docker-compose_clickhouse1_1          bash -c clickhouse server  ...   Up (healthy)   8123/tcp, 9000/tcp, 9009/tcp   
docker-compose_clickhouse2_1          bash -c clickhouse server  ...   Up (healthy)   8123/tcp, 9000/tcp, 9009/tcp   
docker-compose_clickhouse3_1          bash -c clickhouse server  ...   Up (healthy)   8123/tcp, 9000/tcp, 9009/tcp   
docker-compose_openldap1_1            /container/tool/run --copy ...   Up (healthy)   389/tcp, 636/tcp               
docker-compose_zookeeper_1            /docker-entrypoint.sh zkSe ...   Up (healthy)   2181/tcp, 2888/tcp, 3888/tcp   
phpldapadmin                          /container/tool/run              Up (healthy)   443/tcp, 0.0.0.0:8080->80/tcp  

健全性檢查

在繼續之前我們做一些必要的健全性檢查,首先,確保我們的OpenLDAP Server已啟動并正在運行,我們可以執行搜索操作以查看在LDAP Server上定義好的用戶

再次注意,您必須執行docker-compose目錄下的所有docker-compose命令,

docker-compose exec openldap1 bash -c 'ldapsearch -x -H ldap://localhost -b "ou=users,dc=company,dc=com" -D "cn=admin,dc=company,dc=com" -w admin'  
# extended LDIF  
#  
# LDAPv3  
# base <ou=users,dc=company,dc=com> with scope subtree  
# filter: (objectclass=*)  
# requesting: ALL  
#  
  
# users, company.com  
dn: ou=users,dc=company,dc=com  
objectClass: organizationalUnit  
objectClass: top  
ou: users  
  
# ldapuser, users, company.com  
dn: cn=ldapuser,ou=users,dc=company,dc=com  
cn: ldapuser  
gidNumber: 501  
givenName: John  
homeDirectory: /home/users/ldapuser  
objectClass: inetOrgPerson  
objectClass: posixAccount  
objectClass: top  
sn: User  
uid: ldapuser  
uidNumber: 1002  
userPassword:: bGRhcHVzZXI=  
  
# search result  
search: 2  
result: 0 Success  
  
# numResponses: 3  
# numEntries: 2  

可以看到,我們已經定義了一個用戶:cn=ldapuser,ou=users,dc=company,dc=comldapsearch回傳的資料中,ldapuser為用戶名,密碼設定為與用戶名相同(僅用于測驗),

其次,確保ClickHouse服務能夠正常執行查詢,

docker-compose exec clickhouse1 bash -c 'clickhouse-client -q "SELECT version()"'  
docker-compose exec clickhouse2 bash -c 'clickhouse-client -q "SELECT version()"'  
docker-compose exec clickhouse3 bash -c 'clickhouse-client -q "SELECT version()"'  

在ClickHouse中配置LDAP服務器

在將LDAP與ClickHouse進行集成之前,需要讓ClickHouse知道哪里有可用的LDAP服務器以及如何連接它,Clickhouse甚至還可以添加多個LDAP Server的配置,為簡單起見,我們將僅使用在docker-compose集群中的openldap1環境,接下來將組態檔添加到/etc/clickhouse-server/config.d目錄中,以配置LDAP Server,

docker-compose exec clickhouse1 bash -c 'cat <<HEREDOC > /etc/clickhouse-server/config.d/ldap_servers.xml  
<?xml version="1.0" encoding="utf-8"?>  
<yandex>  
  <ldap_servers>  
    <!--LDAP servers b9f1f80c_6598_11eb_80c1_39d7fbdc1e26-->  
    <openldap1>  
      <host>openldap1</host>  
      <port>636</port>  
      <enable_tls>yes</enable_tls>  
      <auth_dn_prefix>cn=</auth_dn_prefix>  
      <auth_dn_suffix>,ou=users,dc=company,dc=com</auth_dn_suffix>  
      <tls_require_cert>never</tls_require_cert>  
    </openldap1>  
  </ldap_servers>  
</yandex>  
HEREDOC'  

接著檢查ldap_servers.xml中的配置是否已合并到預處理的config.xml檔案中,

docker-compose exec clickhouse1 bash -c 'cat /var/lib/clickhouse/preprocessed_configs/config.xml | grep LDAP'  
    <!--LDAP servers b9f1f80c_6598_11eb_80c1_39d7fbdc1e26-->  

可以看到唯一標識字串已經在預處理的config.xml檔案中,說明LDAP Server配置已被Clickhouse成功加載,

使用LDAP驗證ClickHouse用戶

ClickHouse與LDAP的第一級集成是允許使用LDAP Server對ClickHouse用戶進行身份驗證,這樣我們就不必在Clickhouse中為用戶明確指定密碼,而是讓ClickHouse請求LDAP Server進行用戶身份驗證,

在users.xml中定義經過LDAP Server驗證的用戶

我們可將對應的組態檔添加到/etc/clickhouse-server/users.d目錄中以新建Clickhouse用戶,而不需要在配置中為其指定密碼,轉而用LDAP Server配置代替之,

docker-compose exec clickhouse1 bash -c 'cat <<HEREDOC > /etc/clickhouse-server/users.d/ldapuser.xml  
<?xml version="1.0" encoding="utf-8"?>  
<yandex>  
  <users>  
    <!--LDAP users bb6f3d71_6598_11eb_80c1_39d7fbdc1e26-->  
    <ldapuser>  
      <ldap>  
        <server>openldap1</server>  
      </ldap>  
    </ldapuser>  
  </users>  
</yandex>  
HEREDOC'  

確認新增用戶配置已合并到預處理的users.xml中,

$ docker-compose exec clickhouse1 bash -c 'cat /var/lib/clickhouse/preprocessed_configs/users.xml | grep bb6f3d71_6598_11eb_80c1_39d7fbdc1e26'  
    <!--LDAP users bb6f3d71_6598_11eb_80c1_39d7fbdc1e26-->  

現在我們使用ldapuser用戶執行查詢,

docker-compose exec clickhouse1 bash -c 'clickhouse-client -n --user "ldapuser" --password "ldapuser" -q "SELECT user()"'  
ldapuser  

有效了!現在我們試試用錯誤密碼登錄會不會驗證失敗?

docker-compose exec clickhouse1 bash -c 'clickhouse-client -n --user "ldapuser" --password "ldapuser2" -q "SELECT user()"'  
Code: 516. DB::Exception: Received from localhost:9000. DB::Exception: ldapuser: Authentication failed: password is incorrect or there is no user with such name.  

洗掉用戶的組態檔,接下來我們改用RBAC定義Clickhouse用戶

docker-compose exec clickhouse1 bash -c 'rm -rf /etc/clickhouse-server/users.d/ldapuser.xml'  

使用RBAC定義經過LDAP Server驗證的用戶

在Clickhouse中,除XML組態檔之外,我們還可使用RBAC命令以更簡單的方式定義用戶,我們建議使用RBAC命令,因為您可使用ON CLUSTER陳述句在整個Clickhouse集群上創建或洗掉用戶,

CREATE USER命令的語法定義如下,

CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [ON CLUSTER cluster_name1]   
        [, name2 [ON CLUSTER cluster_name2] ...]  
    [IDENTIFIED [WITH {NO_PASSWORD|PLAINTEXT_PASSWORD|SHA256_PASSWORD|SHA256_HASH|DOUBLE_SHA1_PASSWORD|DOUBLE_SHA1_HASH}] BY {'password'|'hash'}]  
    [HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]  
    [DEFAULT ROLE role [,...]]  
    [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]  

現在您還可以使用IDENTIFIED WITH LDAP_SERVER陳述句,系結LDAP Server對該用戶進行身份驗證,

docker-compose exec clickhouse1 bash -c 'clickhouse-client -q "CREATE USER ldapuser IDENTIFIED WITH LDAP_SERVER BY '\''openldap1'\''"'  

檢查用戶是否創建成功

docker-compose exec clickhouse1 bash -c 'clickhouse-client -q "SHOW USERS"'  
default  
ldapuser  

使用ldapuser用戶執行查詢,

docker-compose exec clickhouse1 bash -c 'clickhouse-client -n --user "ldapuser" --password "ldapuser" -q "SELECT user()"'  
ldapuser  

使用錯誤密碼登錄看看會不會報錯

docker-compose exec clickhouse1 bash -c 'clickhouse-client -n --user "ldapuser" --password "ldapuser2" -q "SELECT user()"'  
Code: 516. DB::Exception: Received from localhost:9000. DB::Exception: ldapuser: Authentication failed: password is incorrect or there is no user with such name.  

在集群中使用RBAC定義經過LDAP Server驗證的用戶

RBAC命令允許在群集上創建或洗掉用戶,現在我們將LDAP Server配置添加到其他兩個ClickHouse節點:clickhouse2clickhouse3

首先,將LDAP Server配置添加到clickhouse2

docker-compose exec clickhouse2 bash -c 'cat <<HEREDOC > /etc/clickhouse-server/config.d/ldap_servers.xml  
<?xml version="1.0" encoding="utf-8"?>  
<yandex>  
  <ldap_servers>  
    <!--LDAP servers b9f1f80c_6598_11eb_80c1_39d7fbdc1e26-->  
    <openldap1>  
      <host>openldap1</host>  
      <port>636</port>  
      <enable_tls>yes</enable_tls>  
      <auth_dn_prefix>cn=</auth_dn_prefix>  
      <auth_dn_suffix>,ou=users,dc=company,dc=com</auth_dn_suffix>  
      <tls_require_cert>never</tls_require_cert>  
    </openldap1>  
  </ldap_servers>  
</yandex>  
HEREDOC'  

clickhouse3也進行同樣的操作

docker-compose exec clickhouse3 bash -c 'cat <<HEREDOC > /etc/clickhouse-server/config.d/ldap_servers.xml  
<?xml version="1.0" encoding="utf-8"?>  
<yandex>  
  <ldap_servers>  
    <!--LDAP servers b9f1f80c_6598_11eb_80c1_39d7fbdc1e26-->  
    <openldap1>  
      <host>openldap1</host>  
      <port>636</port>  
      <enable_tls>yes</enable_tls>  
      <auth_dn_prefix>cn=</auth_dn_prefix>  
      <auth_dn_suffix>,ou=users,dc=company,dc=com</auth_dn_suffix>  
      <tls_require_cert>never</tls_require_cert>  
    </openldap1>  
  </ldap_servers>  
</yandex>  
HEREDOC'  

現在,我們將ON CLUSTER子句添加到CREATE USER命令中,在集群上創建ldapuser用戶

docker-compose exec clickhouse1 bash -c 'clickhouse-client -q "CREATE USER IF NOT EXISTS ldapuser IDENTIFIED WITH LDAP_SERVER BY '\''openldap1'\'' ON CLUSTER '\''replicated_cluster'\''"'  
clickhouse2 9000  0   2 0  
clickhouse1 9000  0   1 0  
clickhouse3 9000  0   0 0  

現在,我們以ldapuser用戶登錄到集群的每個節點上執行命令,

docker-compose exec clickhouse1 bash -c 'clickhouse-client -n --user "ldapuser" --password "ldapuser" -q "SELECT user()"'  
docker-compose exec clickhouse2 bash -c 'clickhouse-client -n --user "ldapuser" --password "ldapuser" -q "SELECT user()"'  
docker-compose exec clickhouse3 bash -c 'clickhouse-client -n --user "ldapuser" --password "ldapuser" -q "SELECT user()"'  

優化LDAP身份驗證用戶的登錄

在使用LDAP Server對用戶進行身份驗證后,每次用戶登錄Clickhouse時,ClickHouse都必須請求LDAP Server來對該用戶進行驗證,當許多用戶都需要身份驗證時,這可能不是最佳選擇,為了解決此問題,我們可在Clickhouse的LDAP Server配置中使用<verification_cooldown>引數,該引數指定一次成功登錄之后的時間(單位:秒):在此期間,對于連續請求中的用戶,我們將假定其已被成功驗證, 這樣就無需每次都請求LDAP Server,默認情況下,此引數為0,表示禁用快取,即每次用戶登錄時Clickhouse都會請求LDAP Server進行身份驗證,

當前快取已被禁用,我們在clickhouse1上進行基準測驗:

docker-compose exec clickhouse1 bash -c 'time for n in {1..1000}; do clickhouse-client -n --user "ldapuser" --password "ldapuser" -q "SELECT 1" > /dev/null; done'  
real  0m30.189s  
user  0m14.492s  
sys   0m9.847s  

接著我們在clickhouse1上更改<verification_cooldown>引數,改成5分鐘

docker-compose exec clickhouse1 bash -c 'cat <<HEREDOC > /etc/clickhouse-server/config.d/ldap_servers.xml  
<?xml version="1.0" encoding="utf-8"?>  
<yandex>  
  <ldap_servers>  
    <!--LDAP servers b9f1f80c_6598_11eb_80c1_39d7fbdc1e26-->  
    <openldap1>  
      <host>openldap1</host>  
      <port>636</port>  
      <enable_tls>yes</enable_tls>  
      <verification_cooldown>300</verification_cooldown>  
      <auth_dn_prefix>cn=</auth_dn_prefix>  
      <auth_dn_suffix>,ou=users,dc=company,dc=com</auth_dn_suffix>  
      <tls_require_cert>never</tls_require_cert>  
    </openldap1>  
  </ldap_servers>  
</yandex>  
HEREDOC'  

啟用快取之后,基準測驗結果如下:

docker-compose exec clickhouse1 bash -c 'time for n in {1..1000}; do clickhouse-client -n --user "ldapuser" --password "ldapuser" -q "SELECT 1" > /dev/null; done'  
real  0m22.472s  
user  0m12.000s  
sys   0m8.894s  

如上所示,通過降低Clickhouse重復請求LDAP Server進行身份驗證的開銷,我們使用戶登錄性能提高了約26%,

結論

在本文中,我們介紹了對LDAP與ClickHouse集成的支持,我們研究了如何將LDAP Server配置添加到ClickHouse中,我們還研究了最簡單的情況,即使用LDAP Sever對Clickhouse中定義的用戶進行身份驗證,無論用戶是管理員通過XML檔案或RBAC命令配置的,RBAC命令提供對ON CLUSTER陳述句的支持,有了ON CLUSTER可在整個集群上創建或洗掉用戶,而無需修改集群中每個節點的組態檔,最后,我們研究了如何啟用LDAP用戶身份驗證的快取以優化用戶重復登錄Clickhouse的性能,

請繼續關注下一部分,我們將討論如何將LDAP Server用作外部用戶目錄,從而無需在ClickHouse中定義用戶,如果您還有其他疑問或想討論您的安全需求,請隨時通過[email protected]與我們聯系,我們很樂意為您提供幫助!

推薦閱讀

  • 一文讀懂clickhouse集群監控
  • 30分鐘入門Vim
  • 30分鐘入門GDB
  • STL原始碼分析--vector
  • zookeeper client原理總結
  • redis實作分布式鎖
  • 推薦幾個好用的效率神器
  • C/C++關鍵字之restrict
  • 現代C++之右值語意
  • Python亂碼九問
  • Linux Shell腳本攻略讀書筆記

更多精彩內容,請掃碼關注微信公眾號:后端技術小屋,如果覺得文章對你有幫助的話,請多多分享、轉發、在看,

二維碼

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/270969.html

標籤:大數據

上一篇:求助,連接sqlServer的服務器名稱后面給了實體名會報錯

下一篇:「視頻小課堂」ELK和Kafka是怎么就玩在一起成了日志采集解決方案文字版

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more