go中NOSQL資料庫操作

2021-10-19 07:47:49 字數 1744 閱讀 4658

nosql(not only sql),指的是非關係型的資料庫。隨著web2.0的興起,傳統的關聯式資料庫在應付web2.0**,特別是超大規模和高併發的sns型別的web2.0純動態**已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的資料庫則由於其本身的特點得到了非常迅速的發展。

而go語言作為21世紀的c語言,對nosql的支援也是很好,目前流行的nosql主要有redis、mongodb、cassandra和membase等。這些資料庫都有高效能、高併發讀寫等特點,目前已經廣泛應用於各種應用中。我接下來主要講解一下redis和mongodb的操作。

redis是乙個key-value儲存系統。和memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(鍊錶)、set(集合)和zset(有序集合)。

go目前支援redis的驅動有如下

目前我fork了最後乙個驅動,更新了一些bug,目前應用在我自己的短網域名稱服務專案中(每天200w左右的pv值)

接下來的以我自己fork的這個redis驅動為例來演示如何進行資料的操作

}我們可以看到操作redis非常的方便,而且我實際專案中應用下來效能也很高。client的命令和redis的命令基本保持一致。所以和原生態操作redis非常類似。

mongodb是乙個高效能,開源,無模式的文件型資料庫,是乙個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫當中功能最豐富,最像關聯式資料庫的。他支援的資料結構非常鬆散,採用的是類似json的bjson格式來儲存資料,因此可以儲存比較複雜的資料型別。mongo最大的特點是他支援的查詢語言非常強大,其語法有點類似於物件導向的查詢語言,幾乎可以實現類似關聯式資料庫單錶查詢的絕大部分功能,而且還支援對資料建立索引。

目前go支援mongodb最好的驅動就是mgo,這個驅動目前最有可能成為官方的pkg。

下面我將演示如何通過go來操作mongodb:

package main

import (

"fmt"

"labix.org/v2/mgo"

"labix.org/v2/mgo/bson"

)type person struct

func main()

defer session.close()

session.setmode(mgo.monotonic, true)

c := session.db("test").c("people")

err = c.insert(&person,

&person)

if err != nil

result := person{}

err = c.find(bson.m).one(&result)

if err != nil

fmt.println("phone:", result.phone)

}

我們可以看出來mgo的操作方式和beedb的操作方式幾乎類似,都是基於struct的操作方式,這個就是go style。

Nosql資料庫概述

nosql資料庫簡稱非關係型資料庫,not only sql 那麼nosql資料庫有什麼特點呢?1.易擴充套件 nosql資料庫種類很多,但是有乙個共同的特點是都去掉了關係型資料庫的關係型特性 資料之間無關係,這樣就很容易擴充套件,也在架構的層面帶來了可擴充套件的能力 2.大資料量高效能 nosql...

NoSQL資料庫筆談

序 思想篇cap 最終一致性 變體base 其他i o的五分鐘法則 不要刪除資料 ram是硬碟,硬碟是磁帶 amdahl定律和gustafson定律 萬兆乙太網 手段篇一致性雜湊 亞馬遜的現狀 演算法的選擇 quorum nrw vector clock virtual node gossip go...

NoSQL資料庫簡介

一 簡介 nosql not only sql 泛指非關係型的資料庫。隨著網際網路web2.0 的興起,傳統的關聯式資料庫在應付web2.0 特別是超大規模和高併發的sns型別的web2.0純動態 已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的資料庫則由於其本身的特點得到了非常迅速的發展。...