V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  xujiajun001  ›  全部回复第 3 页 / 共 4 页
回复总数  63
1  2  3  4  
@srt180 redis 我一般当做缓存来用,不会去当 db 使用,事务支持也很弱。不过他的支持丰富的数据结构真的很棒。nutsdb 的数据结构 api 就是模仿他的名字命名。至于 lua 脚本的方式 ,我没试过,不过我在想在代码里写脚本 ,优点是灵活 缺点有点像直接写原生 sql 的感觉,不好维护 也不好看吧。最好 Redis 原生支持最好。
@Damnever 谢谢你的意见建议。为了保证 ACID 的 D 特性 每次 commit 你都必须的 flush/sync,这个我理解的,强一致性。nutsdb 的实现为了写性能更高,现在对 nutsdb 的做法有点缓冲的味道,到 unmap 的时候才能保证数据一定落盘。
” ACID 也不是说你简单加个锁就保证“,能多说一点吗?
@JohnSmith 我发现数据还是会更新到磁盘的。我是调用了 unmap,可能再加个 flush 的话更保障一点。
@runningman 谢谢 你说的很中肯哈
@Damnever 你好 你在我项目中提交的 issue 我已经回复你了,不好意思现在才回你。我其实在代码中使用了 unmmap,我的依据是 https://linux.cn/man2/mmap.2.html 提到这样一句话 The file may not actually be updated until msync(2) or munmap(2) are called,按照他这么说,只调用 unmap 实测发现数据是更新的, 难道我理解错了。
@woniuge 没事 谢谢关注
@woniuge 这位兄弟 有心了 谢谢帮我在看代码。欢迎提交给我 PR,这样我会第一时间看到。

关于第一个问题,你说道:“不必要的 string 转换,可以直接这样写 if segment[0] == ':' {....}” ,我表示不认同。如果不加 string,会有问题的,因为 segment[0] 和 ":" 类型都不一样

关于第二个问题,其实是个人喜好代码风格不同,我比较倾向于少用 else。但我表示认同写的代码存在冗余,但不是“多余”,我已经改了 https://github.com/xujiajun/gorouter/blob/master/router.go#L149-L155
xujiajun

谢谢
@dangerwolf 嗯 。如果你要用 xujiajun/gorouter,你只要再找一个支持数据的操作库( ORM 或者 SQL builder 或者你自己封装), 你可以试试我这个库,比 orm 简单,可以直接输出 json,是个 sql builder: https://github.com/xujiajun/godbal
@dangerwolf 你好,这个是单纯的 router,要直接输出 json,你指的是业务逻辑的数据库的交互吧。这个我这边也开发一个库,是个支持 mysql 的 sqlbuilder,地址: https://github.com/xujiajun/godbal,这个库可以直接操作数据库,你可以看下这个库里面的 examples,支持直接输出 json,配合 xujiajun/gorouter 一起使用。
@EchoUtopia 很好的建议。这个问题我有考虑过,目前设计的是先进先出原则. 把权力开放给使用者,所以在设计路由的时候,设计者自己要注意。尽量不要设计成 :name, {name:regexp}这种差不多的路由
@EchoUtopia 你说只能使用这三种 :name 两个一样的?是不是你写错了?欢迎去我的项目里面提 issure 哦。这样方便我统一处理,thanks。https://github.com/xujiajun/gorouter
2018-11-01 09:19:36 +08:00
回复了 mokeychan 创建的主题 Go 编程语言 <取经>如何学习 GO 语言
分享下我的学 GO 经历,学一遍(大概就行): https://tour.golang.org ,就差不多了 ,再买几本 GO 的书,强化下知识,推荐《 GO 实战编程》,其他的 GO 书理论偏多。我基本上市面上有的都买了。但是最重要的是实践,代码这种东西看看也就了解个大概。还是要实践。要面向需求开发。给自己个目标,做个小项目,比如我当时想开发 web 应用。我在帖子中也提到了( https://www.v2ex.com/t/502534#reply17 )后来有了这个 xujiajun/gorouter,一个简单高性能的 Go Router,和 julienschmidt/httprouter 差不多快,且支持正则。这是我的第一个 Go 开源项目。项目地址: https://github.com/xujiajun/gorouter,你可以去尝试提提 issue,提交 PR。你也可以关注下我哦,一起进步,一起 GO。
@EchoUtopia 你好,你可以压测下,切换到 develop 分支: https://github.com/xujiajun/gorouter/tree/develop ,增加了 xujiajun/gorouter vs gorilla/mux (用的是 githubapi2 ),这是我的笔记本跑出来的结果,仅供大家参考:

```
➜ gorouter git:(develop) ✗ go test -bench=.
GithubAPI Routes: 203
GithubAPI2 Routes: 203
HttpRouter: 37464 Bytes
trie-mux: 133864 Bytes
MuxRouter: 1378528 Bytes
GoRouter1: 85744 Bytes
GoRouter2: 85376 Bytes
goos: darwin
goarch: amd64
pkg: github.com/xujiajun/gorouter
BenchmarkTrieMuxRouterWithGithubAPI-8 10000 624425 ns/op 1086461 B/op 2975 allocs/op
BenchmarkHttpRouterWithGithubAPI-8 10000 556136 ns/op 1034357 B/op 2604 allocs/op
BenchmarkGoRouter1WithGithubAPI-8 10000 601101 ns/op 1034412 B/op 2843 allocs/op
BenchmarkGoRouter2WithGithubAPI2-8 10000 676998 ns/op 1058368 B/op 3177 allocs/op
BenchmarkMuxRouterWithGithubAPI2-8 10000 5414811 ns/op 1219148 B/op 4430 allocs/op
PASS
ok github.com/xujiajun/gorouter 78.775s
```

可以看出 xujiajun/gorouter 性能比 gorilla/mux 好一个数量级
@EchoUtopia 好的 谢谢 你的建议。
@ehlxr 谢谢支持
@EchoUtopia 你好,谢谢关注。githubAPI2 是单独给 gorilla/mux 压测用的,他的部分语法如 /user/{user} xujiajun/gorouter 不支持。只用当用到正则的时候,才回有{},其他都是 :开头 的类似 /user/:id 所以你会在我的 benchmark 看到其他待测的几个 router 都是跑 githubAPI,而 gorilla/mux 用的是 githubAPI2。
PS: xujiajun/gorouter 的语法规则 借鉴了 julienschmidt/httprouter 和 gorilla/mux,支持快捷方式关键词 :id (就会去匹配 id:[0-9]+) ,具体见: https://github.com/xujiajun/gorouter#pattern-rule
@E1n 谢谢关注
@lbp0200 谢谢支持
1  2  3  4  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1556 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 17ms · UTC 16:23 · PVG 00:23 · LAX 09:23 · JFK 12:23
♥ Do have faith in what you're doing.