diff --git a/app/zh/blog/2024-12-28-Cantian/.keep b/app/zh/blog/2024-12-28-Cantian/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/app/zh/blog/2024-12-28-Cantian/2024-12-28-\345\257\271Cantion\351\241\271\347\233\256\351\205\215\347\275\256\345\217\212\344\275\277\347\224\250\345\234\272\346\231\257\347\232\204\350\277\233\344\270\200\346\255\245\346\216\242\347\264\242.md" "b/app/zh/blog/2024-12-28-Cantian/2024-12-28-\345\257\271Cantion\351\241\271\347\233\256\351\205\215\347\275\256\345\217\212\344\275\277\347\224\250\345\234\272\346\231\257\347\232\204\350\277\233\344\270\200\346\255\245\346\216\242\347\264\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..c3bb3df15e92f07804dafdfe7a6c4fc29dc692ae --- /dev/null +++ "b/app/zh/blog/2024-12-28-Cantian/2024-12-28-\345\257\271Cantion\351\241\271\347\233\256\351\205\215\347\275\256\345\217\212\344\275\277\347\224\250\345\234\272\346\231\257\347\232\204\350\277\233\344\270\200\346\255\245\346\216\242\347\264\242.md" @@ -0,0 +1,60 @@ +# Cantian 项目介绍 + +## 项目概述 + +Cantian 是一个开源的存储引擎项目,旨在为数据库提供多主模式下的运行能力。通过共享存储技术,Cantian 允许多个数据库实例同时处理事务,极大地提升了分布式数据库系统的并发处理能力和数据一致性。 + +## 核心功能 + +### 多主模式 +Cantian 支持数据库在多主模式下运行,这意味着任何节点都可以独立处理事务,无需依赖单一的主节点。 + +### 数据一致性 +Cantian 提供了强大的数据一致性保障机制,确保在多主模式下数据的准确性和完整性。 + +### 高效同步 +Cantian 优化了数据同步流程,减少了数据同步延迟,提高了多主模式下的性能。 + +## 测试案例 + +### 性能测试 +我们对 Cantian 进行了一系列的性能测试,包括写入吞吐量、读取延迟和数据同步速度。测试结果显示,Cantian 在高并发场景下表现优异。 + +### 冲突解决测试 +在多主模式下,数据冲突是不可避免的。我们设计了一系列测试案例来验证 Cantian 的冲突解决机制,确保在各种情况下都能快速准确地处理冲突。 + +## 实际案例 + +### 金融交易系统 +Cantian 被应用于金融交易系统中,其多主模式和高数据一致性特性,保证了交易的实时性和准确性。 + +### 实时数据分析 +在实时数据分析领域,Cantian 提供了快速的数据同步能力,使得数据分析结果能够快速更新,满足实时性需求。 + +## 使用场景 + +### 分布式数据库 +Cantian 适用于需要高并发写入和数据一致性的分布式数据库环境。 + +### 云数据库服务 +Cantian 可以作为云数据库服务的一部分,提供多租户环境下的数据一致性和高可用性。 + +## 部署和使用案例 + +### 部署指南 +Cantian 可以在多种操作系统上部署,包括但不限于 openEuler。我们提供了详细的部署指南,帮助用户快速部署 Cantian。 + +### 使用案例 +用户可以通过以下步骤使用 Cantian: +1. 克隆 Cantian 仓库。 +2. 根据部署指南配置环境。 +3. 启动 Cantian 并连接到数据库。 +4. 利用 Cantian 提供的接口进行数据操作。 + +## 结语 + +作为社区的一员,我非常荣幸能够介绍这个项目。Cantian 不仅是一个技术项目,更是一个充满活力的社区。我们欢迎任何对分布式数据库技术感兴趣的开发者加入我们,共同推动 Cantian 的发展。 + +--- + +*更多信息,请访问 Cantian 的 Gitee 页面:[Cantian on Gitee](https://gitee.com/openeuler/cantian)* \ No newline at end of file diff --git a/app/zh/blog/fzr123/.keep b/app/zh/blog/fzr123/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/app/zh/blog/fzr123/2024-12-27-learn-from-go.md b/app/zh/blog/fzr123/2024-12-27-learn-from-go.md new file mode 100644 index 0000000000000000000000000000000000000000..e89aae4cf3c90111b6db4e6e8f23ba81757bb767 --- /dev/null +++ b/app/zh/blog/fzr123/2024-12-27-learn-from-go.md @@ -0,0 +1,228 @@ +## 前言 +初学Go语言,下面仅为个人所学以及小结,若有错误之处,还请指教。 +Go语言基础入门篇的一二节课,其中我对每个讲到的语法都重写或者本地测试运行过,其中第二节课的第三个小项目尚未实现(本人对网络连接那块的脚本尚不熟悉,还在学习中----) +部分代码不能太多,所以贴图了有些。 +## Go基础语法 +目前学过的Go语法只有课程内的,下面是一些小小的笔记。 +### 导包和输出 + +```Go +package main +import "fmt" +func main() { + fmt.Println("hello world") +} +``` + +fmt是与输出有关的包,需要import +输出方式Println和java语法很类似 +### 多类型变量定义 +下面是部分代码,详细代码可以从AI练中学处获取 + +```Go + var a = "initial" + var b, c int = 1, 2 + var d = true + var e float64 + f := float32(e) + g := a + "foo" + const s string = "constant" + const h = 500000000 + const i = 3e20 / h +``` +var 定义一个变量,后面可以直接复制字符,int,布尔类型,32/64位浮点型 +:=代表赋值操作 +math.Sin()是求正弦值 +### 循环for + +```Go + for j := 7; j < 9; j++ { + fmt.Println(j) + } +``` +Go语言没有while或者do--while循环,只有for,条件不需要括号,和python的条件有点类似哈哈哈 +难怪别人说Go是c和python的结合体 +### 条件if + +```Go + if num := 9; num < 0 { + fmt.Println(num, "is negative") + } else if num < 10 { + fmt.Println(num, "has 1 digit") + } else { + fmt.Println(num, "has multiple digits") + } +``` +if-else if-else语句老演员了。同样的,表达式判断不需要括号。 +### switch选择 + +```Go +a := 1 + +    switch a { +    case 1: +        fmt.Println("one") +   default: +        fmt.Println("other") +    } +``` +switch语句不需要break也可以在选择完一个分支后直接跳出语句 +其中的case后面也可以直接接一个表达式 + +```Go + t := time.Now() +    case t.Hour() < 12: +``` +### 数组 +数组初始化,自定义初始化,以及二维数组定义如下 + +```Go + var a [5]int + b := [5]int{1, 2, 3, 4, 5} + var twoD [2][3]int +``` +### 切片 + +```Go + s := make([]string, 3) + s[0] = "a" + s[1] = "b" + s[2] = "c" + fmt.Println("get:", s[2]) // c + fmt.Println("len:", len(s)) // 3 + s = append(s, "d") + s = append(s, "e", "f") + fmt.Println(s) // [a b c d e f] + + c := make([]string, len(s)) + copy(c, s) + fmt.Println(s[2:5]) // [c d e] + fmt.Println(s[:5]) // [a b c d e] + fmt.Println(s[2:]) // [c d e f] + + good := []string{"g", "o", "o", "d"} + fmt.Println(good) // [g o o d] +} +``` +需要make出一个字符串 +读取值感觉和数组一样,按索引读取 +也能len()找长度 +append()插入字符 +copy()复制字符串 +切片和python一样s[a:b] +[]string{}初始化自定义字符串 +### map字典 + +```Go + m := make(map[string]int) + m["one"] = 1 + m["two"] = 2 + r, ok := m["unknow"] + fmt.Println(r, ok) // 0 false + delete(m, "one") + m2 := map[string]int{"one": 1, "two": 2} +``` +map是键值对 +也是make创建的,然后中括号[]内的是key的类型,如上面,int是值的类型,string的键的类型。 +r,ok中的ok代表返回的正确或者错误信息; +delete根据键来删除键值对; +map[string]int{}自定义map字典; +### range + +```Go + for i, num := range nums { + } +``` +i代表索引,num代表索引对应的值;这个语法功能很类似于python中的 + +```Python + for i,num in enumerate(nums): +``` +### 函数 + +```Go +func exists(m map[string]string, k string) (v string, ok bool) { + v, ok = m[k] + return v, ok +} +``` +例如上面的例子,func是固定的函数定义格式,exists是函数名,括号内的m是形参,跟着的是形参的类型字典; +第二个括号里面是函数返回值的类型(v是返回值,string是字符类型); +### 指针point + +```Go +func add2(n int) { + n += 2 +} + +func add2ptr(n *int) { + *n += 2 +} +add2(n) +add2ptr(&n) +``` +这里的指针和c语言可以说是一模一样,指针指向的是地址,传递地址到函数中,进行修改操作,可以对真实值进行修改; +使用&和*呼应 +### 结构体struct + +```Go +type user struct { + +    name     string + +    password string + +} +a := user{name: "wang", password: "1024"} +``` +对于结构体的定义,Go语言和c语言的基本一致; +### 错误error + +```Go + u, err := findUser([]user{{"wang", "1024"}}, "wang") + if err != nil { + fmt.Println(err) + return + } +``` +打印报错的错误信息 +### 格式化输出 + +```Go + fmt.Printf("p=%v\n", p) // p={1 2} + fmt.Printf("p=%+v\n", p) // p={x:1 y:2} + fmt.Printf("p=%#v\n", p) // p=main.point{x:1, y:2} +``` +格式化输出,%v代表基本输出; +%+v代表输出键值对; +%#v代表更详细的输出; +### json对象 + +```Go + a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}} + buf, err := json.Marshal(a) + fmt.Println(buf) // [123 34 78 97...] + fmt.Println(string(buf)) // {"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]} + + + buf, err = json.MarshalIndent(a, "", "\t") + + err = json.Unmarshal(buf, &b) +``` +json.Marshal()序列化,将结构体转换为字节流,string()转化为json字符串对象; +json.MarshalIndent()将json字符串格式化对齐; +json.Unmarshal()将json字符串反序列化为结构体; +### time时间属性 + +```Go + now := time.Now() + fmt.Println(now.Unix()) + fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute()) + fmt.Println(t.Format("2006-01-02 15:04:05")) +``` +time.Now()获取当前时间 +time.Unix()获取时间戳 +t.Format()表示格式化、标准化,上面的那个时间是固定的; +## ps +累了,下篇再更新实战例子一二以及改进作业版本。 + diff --git "a/app/zh/blog/fzr123/2024-12-28-\345\257\271Cantion\351\241\271\347\233\256\351\205\215\347\275\256\345\217\212\344\275\277\347\224\250\345\234\272\346\231\257\347\232\204\350\277\233\344\270\200\346\255\245\346\216\242\347\264\242.md" "b/app/zh/blog/fzr123/2024-12-28-\345\257\271Cantion\351\241\271\347\233\256\351\205\215\347\275\256\345\217\212\344\275\277\347\224\250\345\234\272\346\231\257\347\232\204\350\277\233\344\270\200\346\255\245\346\216\242\347\264\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..c3bb3df15e92f07804dafdfe7a6c4fc29dc692ae --- /dev/null +++ "b/app/zh/blog/fzr123/2024-12-28-\345\257\271Cantion\351\241\271\347\233\256\351\205\215\347\275\256\345\217\212\344\275\277\347\224\250\345\234\272\346\231\257\347\232\204\350\277\233\344\270\200\346\255\245\346\216\242\347\264\242.md" @@ -0,0 +1,60 @@ +# Cantian 项目介绍 + +## 项目概述 + +Cantian 是一个开源的存储引擎项目,旨在为数据库提供多主模式下的运行能力。通过共享存储技术,Cantian 允许多个数据库实例同时处理事务,极大地提升了分布式数据库系统的并发处理能力和数据一致性。 + +## 核心功能 + +### 多主模式 +Cantian 支持数据库在多主模式下运行,这意味着任何节点都可以独立处理事务,无需依赖单一的主节点。 + +### 数据一致性 +Cantian 提供了强大的数据一致性保障机制,确保在多主模式下数据的准确性和完整性。 + +### 高效同步 +Cantian 优化了数据同步流程,减少了数据同步延迟,提高了多主模式下的性能。 + +## 测试案例 + +### 性能测试 +我们对 Cantian 进行了一系列的性能测试,包括写入吞吐量、读取延迟和数据同步速度。测试结果显示,Cantian 在高并发场景下表现优异。 + +### 冲突解决测试 +在多主模式下,数据冲突是不可避免的。我们设计了一系列测试案例来验证 Cantian 的冲突解决机制,确保在各种情况下都能快速准确地处理冲突。 + +## 实际案例 + +### 金融交易系统 +Cantian 被应用于金融交易系统中,其多主模式和高数据一致性特性,保证了交易的实时性和准确性。 + +### 实时数据分析 +在实时数据分析领域,Cantian 提供了快速的数据同步能力,使得数据分析结果能够快速更新,满足实时性需求。 + +## 使用场景 + +### 分布式数据库 +Cantian 适用于需要高并发写入和数据一致性的分布式数据库环境。 + +### 云数据库服务 +Cantian 可以作为云数据库服务的一部分,提供多租户环境下的数据一致性和高可用性。 + +## 部署和使用案例 + +### 部署指南 +Cantian 可以在多种操作系统上部署,包括但不限于 openEuler。我们提供了详细的部署指南,帮助用户快速部署 Cantian。 + +### 使用案例 +用户可以通过以下步骤使用 Cantian: +1. 克隆 Cantian 仓库。 +2. 根据部署指南配置环境。 +3. 启动 Cantian 并连接到数据库。 +4. 利用 Cantian 提供的接口进行数据操作。 + +## 结语 + +作为社区的一员,我非常荣幸能够介绍这个项目。Cantian 不仅是一个技术项目,更是一个充满活力的社区。我们欢迎任何对分布式数据库技术感兴趣的开发者加入我们,共同推动 Cantian 的发展。 + +--- + +*更多信息,请访问 Cantian 的 Gitee 页面:[Cantian on Gitee](https://gitee.com/openeuler/cantian)* \ No newline at end of file