Go语言开发的基于DRH(Deep-Re-Hash)深度哈希分区算法的高性能高可用Key-Value嵌入式事务数据库。
go get -u gitee.com/johng/gf go get -u gitee.com/johng/gkvdb
import "gitee.com/johng/gkvdb/gkvdb" // 创建数据库,指定数据库存放目录 // gkvdb支持多表,默认数据表名称为default db, err := gkvdb.New("/tmp/gkvdb") if err != nil { fmt.Println(err) } key := []byte("name") value := []byte("john") // 插入数据 if err := db.Set(key, value); err != nil { fmt.Println(err) } // 查询数据 fmt.Println(db.Get(key)) // 删除数据 if err := db.Remove(key); err != nil { fmt.Println(err) } // 关闭数据库链接,让GC自动回收数据库相关资源 db.Close()
// 开启事务 tx := db.Begin() // 事务写入 tx.Set(key, value) // 事务查询 fmt.Println(tx.Get(key)) // 事务提交 tx.Commit() // 事务删除 tx.Remove(key) // 事务回滚 tx.Rollback()
// 批量操作需要使用事务来实现 tx := db.Begin() // 批量写入 for i := 0; i < 100; i++ { key := []byte("k_" + strconv.Itoa(i)) value := []byte("v_" + strconv.Itoa(i)) tx.Set(key, value) } tx.Commit() // 批量删除 for i := 0; i < 100; i++ { key := []byte("k_" + strconv.Itoa(i)) tx.Remove(key) } tx.Commit()
// 创建user表 name := "user" tu, err := db.Table(name) if err != nil { fmt.Println(err) } // user表写入数据 tu.Set([]byte("user_0"), []byte("name_0")) // user表查询数据 fmt.Println(tu.Get([]byte("user_0"))) // user表删除数据 tu.Remove([]byte("user_0")) // 通过db对象操作user表写入数据 db.SetTo([]byte("user_1"), []byte("name_1"), name) // 通过db对象操作user表查询数据 fmt.Println(db.GetFrom([]byte("user_1"), name)) // 通过db对象操作user表删除数据 db.RemoveFrom([]byte("user_1"), name) // 手动关闭表,释放表资源 // 一般不用手动关闭,在数据库关闭时会自动关闭所有的表 tu.Close()
// 两张表 name1 := "user1" name2 := "user2" // 创建事务对象 tx := db.Begin() // 事务操作user表写入数据 tx.SetTo([]byte("user_1"), []byte("name_1"), name1) tx.SetTo([]byte("user_2"), []byte("name_2"), name2) // 事务操作user表查询数据 fmt.Println("tx get1:", tx.GetFrom([]byte("user_1"), name1)) fmt.Println("tx get2:", tx.GetFrom([]byte("user_2"), name2)) tx.Commit() fmt.Println("db get1:", db.GetFrom([]byte("user_1"), name1)) fmt.Println("db get2:", db.GetFrom([]byte("user_2"), name2)) // 事务操作user表删除数据 tx.RemoveFrom([]byte("user_1"), name1) tx.RemoveFrom([]byte("user_2"), name2) fmt.Println("tx removed1:",tx.GetFrom([]byte("user_1"), name1)) fmt.Println("tx removed2:",tx.GetFrom([]byte("user_2"), name2)) // 删除操作将被回滚 tx.Rollback() // 重新查询 fmt.Println("tx get1:", tx.GetFrom([]byte("user_1"), name1)) fmt.Println("tx get2:", tx.GetFrom([]byte("user_2"), name2)) fmt.Println("db get1:", db.GetFrom([]byte("user_1"), name1)) fmt.Println("db get2:", db.GetFrom([]byte("user_2"), name2))
// ======默认default表的遍历===== // 随机获取10条数据 fmt.Println(db.Items(10)) // 获取所有的键值对数据 fmt.Println(db.Items(-1)) // 获取所有的键键名 fmt.Println(db.Keys(-1)) // 获取所有的键键值 fmt.Println(db.Values(-1)) // ======指定表的遍历===== // 两张表 name1 := "user1" name2 := "user2" tu1, err := db.Table(name1) if err != nil { fmt.Println(err) } tu2, err := db.Table(name2) if err != nil { fmt.Println(err) } for i := 0; i < 10; i++ { key := []byte("k_" + strconv.Itoa(i)) value := []byte("v_" + strconv.Itoa(i)) tu1.Set(key, value) } for i := 10; i < 20; i++ { key := []byte("k_" + strconv.Itoa(i)) value := []byte("v_" + strconv.Itoa(i)) tu2.Set(key, value) } fmt.Println(tu1.Items(-1)) fmt.Println(tu2.Items(-1))
Go语言开发的基于DRH(Deep-Re-Hash)深度哈希分区算法的高性能高可用Key-Value嵌入式事务数据库。 gkvdb是开源的,免费的,基于MIT协议进行分发,开源项目地址(gitee与github仓库保持实时同步): Gitee( https://gitee.com/johng/gkvdb ),Github( https://github.com/johng-cn/g... ) 特点
来源:http://www.techug.com/full-stack-python 前段时间,ThoughtWorks 在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用 JavaScript 进行前端、服务器端,甚至数据库(MongoDB)开发,一个 Web 应用开发人员,只需要学会一门语言,就可以实现整个应用。 受此启发,我发现 Python
数据库类型 dbm.gnu dbm.ndbm dbm.dumb 创建一个新的数据库 # dbm_new.py import dbm with dbm.open('/tmp/example.db', 'n') as db: db['key'] = 'value' db['today'] = 'Sunday' db['author'] = 'Doug' # dbm_whic
本文向大家介绍Go语言中嵌入C语言的方法,包括了Go语言中嵌入C语言的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Go语言中嵌入C语言的方法。分享给大家供大家参考。具体分析如下: Go语言官方带了一个工具叫cgo,可以很方便的在Go语言代码中内嵌C代码或做C和Go代码的集成。下面是一段简单的在Go中内嵌C的实验代码: 把上面代码保存到ctest.go文件,运行:go run cte
我正在构建一个将使用neo4j的web应用程序。我将在Java构建一个REST API,它将使用Neo4j嵌入式版本。这个架构有什么问题吗? 用别的方法好吗?Neo4j服务器? 谢谢!
名词解释 名词 解释 SDK 软件开发工具包,HeyThings SDK包含了HeyThings协议的实现,客户在SDK的基础上,可快速完成产品接入 MCU 微控制单元,嵌入式设备的核心控制芯片,这里指客户已有产品中的核心控制芯片 schema 产品功能抽象服务定义,产品抽象为具备多个服务,每个服务包含支持的属性、方法、事件 user_helper 应用层辅助代码,实现基于HeyThings协议的
Adds or retrieves given value associated with given key. (Don’t confuse with data- attributes) See also Element.removeData Parameters keystringkey to store data valueanyvalue to store Returns: objectE
设置元素属性。需要注意的是,应该始终调用该方法来修改属性,而不是直接 element.xxx = ... 这样的形式,因为后者不会重绘物体。 参数 名称 类型 默认值 描述 key string|Object 设置的属性。可以是 string 类型的属性名称,或者 Object 类型的属性及其值。 value * 属性值。 例子 element.attr('position', [100, 200
概述 ThinkCMF已经默认开启了多语言的支持,后台以语言包形式实现多语言,前台以语言包和多模板的形式实现多语言. 语言包 ThinkCMF开启的语言有三个,分别是zh-cn,en-us,zh-tw,此项配置在application/Common/Conf/config.php配置文件下,可以通过更改LANG_LIST的值增加语言. 语言包分为框架核心语言包(在simplewind/Core/L