V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  hopingtop  ›  全部回复第 3 页 / 共 10 页
回复总数  200
1  2  3  4  5  6  7  8  9  10  
@PTLin #4 我也是这样,没刻意控制饮食,就是少吃白米饭,但是每天中午就走 1 小时,流汗,多喝水,接近 3 个月,原体重 180 ,目前瘦了 13 斤, 最近体检,血脂类的指标好了不少
@hopingtop #17 再补一个查询体验,只要时间范围做好,命中索引 不长的复合索引,根据日志的查询感官来说,单集合 5000W 数据,可以做到 秒级返回。
我提供一个 Mongodb 写数据性能的实际体验吧。
之前写了一个小的日志收集,提供的 gRPC 传输,2c4g 的 Mgo ,一天至少写 2-3 千万的数据,但是这个是多集合写。
分担到单集合有些峰值差不多在 5-7 百万数据,CPU 使用波动幅度很小,是因为做了集合分片的。

你的需求就用 mongo ,随便用,本身他也支持 GPS 的查询。 实在担心,自己 router 做一个集合分片即可。
没必要使用 mongodb 自带的 Sharding ,运维成本又上去了。

再回到你说的数据不丢失,这已经有很多成熟的解决方案了,匹配自己的技术栈和架构,找最简单的就行,如果发送端有最基本的重试,那么加一个 gateway 就是最实在的!
2023-07-28 16:22:22 +08:00
回复了 EyebrowsWhite 创建的主题 推广 [抽奖] 评论送两台 OneKey Mini
先了解一下什么是 Onekey mini
2023-07-20 14:44:21 +08:00
回复了 eagles 创建的主题 生活 生了娃之后,才发现很多事情和想象的很不一样
还是把娃看的太"金贵"了!
当然每个家庭不同,如果围绕孩子转,那自然会多很多辛苦。
有时我感觉孩子到成了家长的一件 "投资品"
孩子的适应能力是很强的,大人承担多了,孩子自己就承担少。
当然有些东西也是天生的。
多数家庭,家长给予正常的陪伴与多点耐心,其实就很好了。

如无特殊条件,真没必要事事都参考书,和听别人说,多数情况下只会更累!

与孩子保持好边界挺好的!形成习惯,双方都能理解,能沟通,我现在更像是我儿子的合作伙伴!

PS: 我也是一名奶爸,2 男娃,上述只是我的一些碎碎念和个人观点。
2023-07-19 09:39:48 +08:00
回复了 yujianwjj 创建的主题 Go 编程语言 golang 代码重构求助
@hopingtop #9 我从 OP 的描述中。理解到的就是
1. 之前 文件中是保存的 明文,现在想 文件中保存 密文
2. 想改最少的代码,实现这个功能。

得出上述建议,如果我理解错了,就当我没说 ~ ~#
2023-07-19 09:35:51 +08:00
回复了 yujianwjj 创建的主题 Go 编程语言 golang 代码重构求助
按照我的理解,OP 是不是想这样?

type A struct {
conf string `json:"Config"`// 存入你存入的配置
Config string `json:"-"` // 这个先为空, 假设已 JSON 序列化做示例
}

然后你看看 A 这个结构体怎么生成的,是不是一次生成,到处用。
如果是:那你就再 生成方法那里, 类似于 执行一个 Init() 方法,把 conf -> Config


这样你在使用的地方用 A.Config 就不需要改动。

如果这个结构体生成的地方很少,那么可能几行代码就解决了。
2023-07-17 13:56:06 +08:00
回复了 dust0522 创建的主题 程序员 真没见过这种问题,求帮助
有没有大佬,继续讨论一下 触发防火墙的规则的问题?

是因为 base64 中的某段数据假设 '3122ABC' = '我是恶意的'
防火墙规则 base64('我是恶意的') ,然后 base64(image).Match(base64(Rule)) ?
防火墙发现是 base64 的编码,就用规则 base64 之后再去匹配?
2023-07-13 09:41:54 +08:00
回复了 matytan 创建的主题 Go 编程语言 分享一个自己 golang 的库,用于尽量不 GC 的内存池
@matrix1010 #20 其实网上有比较多的案例,只是大部分情况下,遇不到。大多数场景,我们所产生的数据包 浮动是有限的,所以里面的 buffer 大小就算扩容也有限,本身来说 sync.Pool 是会回收,只是比较慢,通常来说一般要经过 2-3 个 GC 标记确认不用了才回收,但是这里一般流量较大,才会使用到 sync.Pool 的场景,所以可能导致一直回收不了。

第二点就是 我们是容器部署,容器层限制了 2G 的内存使用量。 但是这个容器限制对于 Go 语言是感知不到的。在 go >1.19 版本,才出现有一个参数配置好像是 GOMEMLIMIT=xx ,告知 Go 我限制了内存。这个时候感到分配压力,GC 才会频繁活动!

但是我们恰巧是 <1.19 , 我们物理机本身是 32G 内存,所以 Go 感觉内存是杠杠够的,但是 Docker 的 Limit ,导致在 Docker 层直接把进程 Kill 了 https://i.imgur.com/huX6coX.png
2023-07-12 18:43:38 +08:00
回复了 matytan 创建的主题 Go 编程语言 分享一个自己 golang 的库,用于尽量不 GC 的内存池
@hopingtop #17 '我确定是' -> '我不确定是'
2023-07-12 18:42:43 +08:00
回复了 matytan 创建的主题 Go 编程语言 分享一个自己 golang 的库,用于尽量不 GC 的内存池
@Nazz #16 我确定是我表示不清楚,还是太久了,你忘记了,所以我们说的不是同一个东西,你可以再去看看代码
```go
// NewEncoder returns a new encoder that writes to w.
func NewEncoder(w io.Writer) *Encoder {
return &Encoder{w: w, escapeHTML: true}
}

// Encode writes the JSON encoding of v to the stream,
// followed by a newline character.
//
// See the documentation for Marshal for details about the
// conversion of Go values to JSON.
func (enc *Encoder) Encode(v any) error {
if enc.err != nil {
return enc.err
}

e := newEncodeState()
defer encodeStatePool.Put(e)
```
```go
var encodeStatePool sync.Pool

func newEncodeState() *encodeState {
if v := encodeStatePool.Get(); v != nil {
e := v.(*encodeState)
e.Reset()
if len(e.ptrSeen) > 0 {
panic("ptrEncoder.encode should have emptied ptrSeen via defers")
}
e.ptrLevel = 0
return e
}
return &encodeState{ptrSeen: make(map[any]struct{})}
}
```
核心消耗内存的地方是 encodeState
2023-07-12 17:32:35 +08:00
回复了 matytan 创建的主题 Go 编程语言 分享一个自己 golang 的库,用于尽量不 GC 的内存池
@Nazz #14 唉,encode/json 底层实现用了 全局 sync.Pool ,包括 json-iterator 也是类似实现,所以包不了。 如果 json-iterator 提供设置 自定义的 pool 就好了,可惜也没有
2023-07-12 17:25:40 +08:00
回复了 matytan 创建的主题 Go 编程语言 分享一个自己 golang 的库,用于尽量不 GC 的内存池
@Trim21 #11 场景比较特殊,当前绑定了 json 序列化,后期准备改成 pb 一劳永逸
2023-07-12 17:23:20 +08:00
回复了 matytan 创建的主题 Go 编程语言 分享一个自己 golang 的库,用于尽量不 GC 的内存池
我才看了 op 的代码,如果你真的想实现 mem 的高效利用,可以参考上面的链接实现或许会更好!

目前 mempool 有点问题就是,限制了上限,但是释放不了下限,没有考虑到 release 机制, 最终还是可能会把所有 buffer 都撑大!
2023-07-12 17:15:42 +08:00
回复了 matytan 创建的主题 Go 编程语言 分享一个自己 golang 的库,用于尽量不 GC 的内存池
我们也遇到 op 一样的问题,json 序列化会撑爆内存,就是因为 sync.Pool + json.Buffer 导致的。
当 99%的数据是小包 1%的数据突然来一个几十 MB 的大包,那么有可能后面 sync.Pool 里面的 buffer 都会变成几十 MB ,就会导致内存爆掉。

这个问题,Golang 有最新的提案和实现, 就是动态优化 buffer 的大小。 但是还没有合并!

相关 code 链接 https://go-review.googlesource.com/c/go/+/471200
@ttentau1 #288 感谢,脚本很好用!!!
@hopingtop #284 我发现是,如果我回复后,不刷新,那么
当前显示,换行就是失效的!

然后刷新后,就是正常的!
@hopingtop #283 看来换行还是失败了, 难道要加 \n
加入\n 测试


换行\n
我想知道,为什么我回车换行 失效了!

是我使用问题,还是本地环境问题?

这是一个我期望换行的语句!

换行!


3 个回车换行!
1  2  3  4  5  6  7  8  9  10  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1538 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms · UTC 16:39 · PVG 00:39 · LAX 08:39 · JFK 11:39
Developed with CodeLauncher
♥ Do have faith in what you're doing.