十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本教程介紹了使用 Godatabase/sql及其標準庫中的包訪問關系數(shù)據(jù)庫的基礎知識。

創(chuàng)新互聯(lián)是一家專注于做網(wǎng)站、成都網(wǎng)站制作和光華機房服務器托管的網(wǎng)絡公司,有著豐富的建站經(jīng)驗和案例。
您將使用的database/sql包包括用于連接數(shù)據(jù)庫、執(zhí)行事務、取消正在進行的操作等的類型和函數(shù)。
在本教程中,您將創(chuàng)建一個數(shù)據(jù)庫,然后編寫代碼來訪問該數(shù)據(jù)庫。您的示例項目將是有關老式爵士樂唱片的數(shù)據(jù)存儲庫。
首先,為您要編寫的代碼創(chuàng)建一個文件夾。
1、打開命令提示符并切換到您的主目錄。
在 Linux 或 Mac 上:
在 Windows 上:
2、在命令提示符下,為您的代碼創(chuàng)建一個名為 data-access 的目錄。
3、創(chuàng)建一個模塊,您可以在其中管理將在本教程中添加的依賴項。
運行go mod init命令,為其提供新代碼的模塊路徑。
此命令創(chuàng)建一個 go.mod 文件,您添加的依賴項將在其中列出以供跟蹤。
注意: 在實際開發(fā)中,您會指定一個更符合您自己需求的模塊路徑。有關更多信息,請參閱一下文章。
GO語言(二十五):管理依賴項(上)
GO語言(二十六):管理依賴項(中)
GO語言(二十七):管理依賴項(下)
接下來,您將創(chuàng)建一個數(shù)據(jù)庫。
在此步驟中,您將創(chuàng)建要使用的數(shù)據(jù)庫。您將使用 DBMS 本身的 CLI 創(chuàng)建數(shù)據(jù)庫和表,以及添加數(shù)據(jù)。
您將創(chuàng)建一個數(shù)據(jù)庫,其中包含有關黑膠唱片上的老式爵士樂錄音的數(shù)據(jù)。
這里的代碼使用MySQL CLI,但大多數(shù) DBMS 都有自己的 CLI,具有類似的功能。
1、打開一個新的命令提示符。
在命令行,登錄到您的 DBMS,如下面的 MySQL 示例所示。
2、在mysql命令提示符下,創(chuàng)建一個數(shù)據(jù)庫。
3、切到您剛剛創(chuàng)建的數(shù)據(jù)庫,以便您可以添加表。
4、在文本編輯器的 data-access 文件夾中,創(chuàng)建一個名為 create-tables.sql 的文件來保存用于添加表的 SQL 腳本。
將以下 SQL 代碼粘貼到文件中,然后保存文件。
在此 SQL 代碼中:
(1)刪除名為album表。 首先執(zhí)行此命令可以讓您更輕松地稍后重新運行腳本。
(2)創(chuàng)建一個album包含四列的表:title、artist和price。每行的id值由 DBMS 自動創(chuàng)建。
(3)添加帶有值的四行。
5、在mysql命令提示符下,運行您剛剛創(chuàng)建的腳本。
您將使用以下形式的source命令:
6、在 DBMS 命令提示符處,使用SELECT語句來驗證您是否已成功創(chuàng)建包含數(shù)據(jù)的表。
接下來,您將編寫一些 Go 代碼進行連接,以便進行查詢。
現(xiàn)在你已經(jīng)有了一個包含一些數(shù)據(jù)的數(shù)據(jù)庫,開始你的 Go 代碼。
找到并導入一個數(shù)據(jù)庫驅動程序,該驅動程序會將您通過database/sql包中的函數(shù)發(fā)出的請求轉換為數(shù)據(jù)庫可以理解的請求。
1、在您的瀏覽器中,訪問SQLDrivers wiki 頁面以識別您可以使用的驅動程序。
2、使用頁面上的列表來識別您將使用的驅動程序。為了在本教程中訪問 MySQL,您將使用 Go-MySQL-Driver。
3、請注意驅動程序的包名稱 - 此處為github點抗 /go-sql-driver/mysql.
4、使用您的文本編輯器,創(chuàng)建一個用于編寫 Go 代碼的文件,并將該文件作為 main.go 保存在您之前創(chuàng)建的數(shù)據(jù)訪問目錄中。
5、進入main.go,粘貼以下代碼導入驅動包。
在此代碼中:
(1)將您的代碼添加到main包中,以便您可以獨立執(zhí)行它。
(2)導入 MySQL 驅動程序github點抗 /go-sql-driver/mysql。
導入驅動程序后,您將開始編寫代碼以訪問數(shù)據(jù)庫。
現(xiàn)在編寫一些 Go 代碼,讓您使用數(shù)據(jù)庫句柄訪問數(shù)據(jù)庫。
您將使用指向結構的指針sql.DB,它表示對特定數(shù)據(jù)庫的訪問。
編寫代碼
1、進入 main.go,在import您剛剛添加的代碼下方,粘貼以下 Go 代碼以創(chuàng)建數(shù)據(jù)庫句柄。
在此代碼中:
(3)使用 MySQL 驅動程序Config和FormatDSN類型以收集連接屬性并將它們格式化為連接字符串的 DSN。
該Config結構使代碼比連接字符串更容易閱讀。
(4)調用sql.Open 初始化db變量,傳遞 FormatDSN。
(5)檢查來自 的錯誤sql.Open。例如,如果您的數(shù)據(jù)庫連接細節(jié)格式不正確,它可能會失敗。
為了簡化代碼,您調用log.Fatal結束執(zhí)行并將錯誤打印到控制臺。在生產(chǎn)代碼中,您會希望以更優(yōu)雅的方式處理錯誤。
(6)調用DB.Ping以確認連接到數(shù)據(jù)庫有效。在運行時, sql.Open可能不會立即連接,具體取決于驅動程序。您在Ping此處使用以確認 database/sql包可以在需要時連接。
(7)檢查來自Ping的錯誤,以防連接失敗。
(8)Ping如果連接成功,則打印一條消息。
文件的頂部現(xiàn)在應該如下所示:
3、保存 main.go。
1、開始跟蹤 MySQL 驅動程序模塊作為依賴項。
使用go get 添加 github點抗 /go-sql-driver/mysql 模塊作為您自己模塊的依賴項。使用點參數(shù)表示“獲取當前目錄中代碼的依賴項”。
2、在命令提示符下,設置Go 程序使用的DBUSER和DBPASS環(huán)境變量。
在 Linux 或 Mac 上:
在 Windows 上:
3、在包含 main.go 的目錄中的命令行中,通過鍵入go run來運行代碼。
連接成功了!
接下來,您將查詢一些數(shù)據(jù)。
協(xié)議+域名+端口號都相同才是同域
在 HTML 中,a, form, img, script, iframe, link 等標簽以及 Ajax 都可以指向一個資源地址,而所謂的跨域請求就是指:當前發(fā)起請求的域與該請求指向的資源所在的域不一樣。
如果對跨域請求不做限制,會有安全隱患
跨源資源共享 Cross-Origin Resource Sharing(CORS) 是一個新的 W3C 標準,它新增的一組HTTP首部字段,允許服務端其聲明哪些源站有權限訪問哪些資源。換言之,它允許瀏覽器向聲明了 CORS 的跨域服務器,發(fā)出 XMLHttpReuest 請求,從而克服 Ajax 只能同源使用的限制。
在使用go語言寫測試服務的時候遇到了前端跨域請求問題,只需在go中加入
http跨域:
TiDB 是 PingCAP 自主研發(fā)的開源分布式關系型數(shù)據(jù)庫,具備商業(yè)級數(shù)據(jù)庫的數(shù)據(jù)可靠性,可用性,安全性等特性,支持在線彈性水平擴展,兼容 MySQL 協(xié)議及生態(tài),創(chuàng)新性實現(xiàn) OLTP 及 OLAP 融合。
TiDB 3.0 版本顯著提升了大規(guī)模集群的穩(wěn)定性,集群支持 150+ 存儲節(jié)點,300+TB 存儲容量長期穩(wěn)定運行。易用性方面引入大量降低用戶運維成本的優(yōu)化,包括引入 Information_Schema 中的多個實用系統(tǒng)視圖、EXPLAIN ANALYZE、SQL Trace 等。在性能方面,特別是 OLTP 性能方面,3.0 比 2.1 也有大幅提升,其中 TPC-C 性能提升約 4.5 倍,Sysbench 性能提升約 1.5 倍,OLAP 方面,TPC-H 50G Q15 因實現(xiàn) View 可以執(zhí)行,至此 TPC-H 22 個 Query 均可正常運行。新功能方面增加了窗口函數(shù)、視圖(實驗特性)、分區(qū)表、插件系統(tǒng)、悲觀鎖(實驗特性)。
截止本文發(fā)稿時 TiDB 已在 500+ 用戶的生產(chǎn)環(huán)境中長期穩(wěn)定運行,涵蓋金融、保險、制造,互聯(lián)網(wǎng), 游戲 等領域,涉及交易、數(shù)據(jù)中臺、 歷史 庫等多個業(yè)務場景。不同業(yè)務場景對關系型數(shù)據(jù)庫的訴求可用 “百花齊放”來形容,但對關系數(shù)據(jù)庫最根本的訴求未發(fā)生任何變化,如數(shù)據(jù)可靠性,系統(tǒng)穩(wěn)定性,可擴展性,安全性,易用性等。請跟隨我們的腳步梳理 TiDB 3.0 有什么樣的驚喜。
3.0 與 2.1 版本相比,顯著提升了大規(guī)模集群的穩(wěn)定性,支持單集群 150+ 存儲節(jié)點,300+TB 存儲容量長期穩(wěn)定運行,主要的優(yōu)化點如下:
1. 優(yōu)化 Raft 副本之間的心跳機制,按照 Region 的活躍程度調整心跳頻率,減小冷數(shù)據(jù)對集群的負擔。
2. 熱點調度策略支持更多參數(shù)配置,采用更高優(yōu)先級,并提升熱點調度的準確性。
3. 優(yōu)化 PD 調度流程,提供調度限流機制,提升系統(tǒng)穩(wěn)定性。
4. 新增分布式 GC 功能,提升 GC 的性能,降低大集群 GC 時間,提升系統(tǒng)穩(wěn)定性。
眾所周知,數(shù)據(jù)庫查詢計劃的穩(wěn)定性對業(yè)務至關重要,TiDB 3.0 版本采用多種優(yōu)化手段提升查詢計劃的穩(wěn)定性,如下:
1. 新增 Fast Analyze 功能,提升收集統(tǒng)計信息的速度,降低集群資源的消耗及對業(yè)務的影響。
2. 新增 Incremental Analyze 功能,提升收集單調遞增的索引統(tǒng)計信息的速度,降低集群資源的消耗及對業(yè)務的影響。
3. 在 CM-Sketch 中新增 TopN 的統(tǒng)計信息,緩解 CM-Sketch 哈希沖突導致估算偏大,提升代價估算的準確性,提升查詢計劃的穩(wěn)定性。
4. 引入 Skyline Pruning 框架,利用規(guī)則防止查詢計劃過度依賴統(tǒng)計信息,緩解因統(tǒng)計信息滯后導致選擇的查詢計劃不是最優(yōu)的情況,提升查詢計劃的穩(wěn)定性。
5. 新增 SQL Plan Management 功能,支持在查詢計劃不準確時手動綁定查詢計劃,提升查詢計劃的穩(wěn)定性。
1. OLTP
3.0 與 2.1 版本相比 Sysbench 的 Point Select,Update Index,Update Non-Index 均提升約 1.5 倍,TPC-C 性能提升約 4.5 倍。主要的優(yōu)化點如下:
1. TiDB 持續(xù)優(yōu)化 SQL 執(zhí)行器,包括:優(yōu)化 NOT EXISTS 子查詢轉化為 Anti Semi Join,優(yōu)化多表 Join 時 Join 順序選擇等。
2. 優(yōu)化 Index Join 邏輯,擴大 Index Join 算子的適用場景并提升代價估算的準確性。
3. TiKV 批量接收和發(fā)送消息功能,提升寫入密集的場景的 TPS 約 7%,讀密集的場景提升約 30%。
4. TiKV 優(yōu)化內存管理,減少 Iterator Key Bound Option 的內存分配和拷貝,多個 Column Families 共享 block cache 提升 cache 命中率等手段大幅提升性能。
5. 引入 Titan 存儲引擎插件,提升 Value 值超過 1KB 時性能,緩解 RocksDB 寫放大問題,減少磁盤 IO 的占用。
6. TiKV 新增多線程 Raftstore 和 Apply 功能,提升單節(jié)點內可擴展性,進而提升單節(jié)點內并發(fā)處理能力和資源利用率,降低延時,大幅提升集群寫入能力。
TiDB Lightning 性能與 2019 年年初相比提升 3 倍,從 100GB/h 提升到 300GB/h,即 28MB/s 提升到 85MB/s,優(yōu)化點,如下:
1. 提升 SQL 轉化成 KV Pairs 的性能,減少不必要的開銷。
2. 提升單表導入性能,單表支持批量導入。
3. 提升 TiKV-Importer 導入數(shù)據(jù)性能,支持將數(shù)據(jù)和索引分別導入。
4. TiKV-Importer 支持上傳 SST 文件限速功能。
RBAC(Role-Based Access Control,基于角色的權限訪問控制) 是商業(yè)系統(tǒng)中最常見的權限管理技術之一,通過 RBAC 思想可以構建最簡單“用戶-角色-權限”的訪問權限控制模型。RBAC 中用戶與角色關聯(lián),權限與角色關聯(lián),角色與權限之間一般是多對多的關系,用戶通過成為什么樣的角色獲取該角色所擁有的權限,達到簡化權限管理的目的,通過此版本的迭代 RBAC 功能開發(fā)完成。
IP 白名單功能(企業(yè)版特性) :TiDB 提供基于 IP 白名單實現(xiàn)網(wǎng)絡安全訪問控制,用戶可根據(jù)實際情況配置相關的訪問策略。
Audit log 功能(企業(yè)版特性) :Audit log 記錄用戶對數(shù)據(jù)庫所執(zhí)行的操作,通過記錄 Audit log 用戶可以對數(shù)據(jù)庫進行故障分析,行為分析,安全審計等,幫助用戶獲取數(shù)據(jù)執(zhí)行情況。
加密存儲(企業(yè)版特性) :TiDB 利用 RocksDB 自身加密功能,實現(xiàn)加密存儲的功能,保證所有寫入到磁盤的數(shù)據(jù)都經(jīng)過加密,降低數(shù)據(jù)泄露的風險。
完善權限語句的權限檢查 ,新增 ANALYZE,USE,SET GLOBAL,SHOW PROCESSLIST 語句權限檢查。
1. 新增 SQL 方式查詢慢查詢,豐富 TiDB 慢查詢日志內容,如:Coprocessor 任務數(shù),平均/最長/90% 執(zhí)行/等待時間,執(zhí)行/等待時間最長的 TiKV 地址,簡化慢查詢定位工作,提高排查慢查詢問題效率,提升產(chǎn)品易用性。
2. 新增系統(tǒng)配置項合法性檢查,優(yōu)化系統(tǒng)監(jiān)控項等,提升產(chǎn)品易用性。
3. 新增對 TableReader、IndexReader 和 IndexLookupReader 算子內存使用情況統(tǒng)計信息,提高 Query 內存使用統(tǒng)計的準確性,提升處理內存消耗較大語句的效率。
4. 制定日志規(guī)范,重構日志系統(tǒng),統(tǒng)一日志格式,方便用戶理解日志內容,有助于通過工具對日志進行定量分析。
5. 新增 EXPLAIN ANALYZE 功能,提升SQL 調優(yōu)的易用性。
6. 新增 SQL 語句 Trace 功能,方便排查問題。
7. 新增通過 unix_socket 方式連接數(shù)據(jù)庫。
8. 新增快速恢復被刪除表功能,當誤刪除數(shù)據(jù)時可通過此功能快速恢復數(shù)據(jù)。
TiDB 3.0 新增 TiFlash 組件,解決復雜分析及 HTAP 場景。TiFlash 是列式存儲系統(tǒng),與行存儲系統(tǒng)實時同步,具備低延時,高性能,事務一致性讀等特性。 通過 Raft 協(xié)議從 TiKV 中實時同步行存數(shù)據(jù)并轉化成列存儲格式持久化到一組獨立的節(jié)點,解決行列混合存儲以及資源隔離性問題。TiFlash 可用作行存儲系統(tǒng)(TiKV)實時鏡像,實時鏡像可獨立于行存儲系統(tǒng),將行存儲及列存儲從物理隔離開,提供完善的資源隔離方案,HTAP 場景最優(yōu)推薦方案;亦可用作行存儲表的索引,配合行存儲對外提供智能的 OLAP 服務,提升約 10 倍復雜的混合查詢的性能。
TiFlash 目前處于 Beta 階段,計劃 2019 年 12 月 31 日之前 GA,歡迎大家申請試用。
未來我們會繼續(xù)投入到系統(tǒng)穩(wěn)定性,易用性,性能,彈性擴展方面,向用戶提供極致的彈性伸縮能力,極致的性能體驗,極致的用戶體驗。
穩(wěn)定性方面 V4.0 版本將繼續(xù)完善 V3.0 未 GA 的重大特性,例如:悲觀事務模型,View,Table Partition,Titan 行存儲引擎,TiFlash 列存儲引擎;引入近似物理備份恢復解決分布數(shù)據(jù)庫備份恢復難題;優(yōu)化 PD 調度功能等。
性能方面 V4.0 版本將繼續(xù)優(yōu)化事務處理流程,減少事務資源消耗,提升性能,例如:1PC,省去獲取 commit ts 操作等。
彈性擴展方面,PD 將提供彈性擴展所需的元信息供外部系統(tǒng)調用,外部系統(tǒng)可根據(jù)元信息及負載情況動態(tài)伸縮集群規(guī)模,達成節(jié)省成本的目標。
我們相信戰(zhàn)勝“未知”最好的武器就是社區(qū)的力量,基礎軟件需要堅定地走開源路線。截止發(fā)稿我們已經(jīng)完成 41 篇源碼閱讀文章。TiDB 開源社區(qū)總計 265 位 Contributor,6 位 Committer,在這里我們對社區(qū)貢獻者表示由衷的感謝,希望更多志同道合的人能加入進來,也希望大家在 TiDB 這個開源社區(qū)能夠有所收獲。
TiDB 3.0 GA Release Notes: