gpt4 book ai didi

go - Cloud Firestore变得非常缓慢

转载 作者:行者123 更新时间:2023-12-01 22:17:08 25 4
gpt4 key购买 nike

到目前为止,我使用cloud sql作为后端数据库构建了一个项目。

我认为,由于数据是用很小的记录构成的,因此文档存储将更适合它-特别是因为postgres不容易扩展。因此,我想尝试数据存储库-已弃用,并替换为 firestore -很好。

我将一个文档插入一个集合中,使用一个表在云sql上创建了一个测试sql数据库,并插入了相同的记录,然后在Go中运行了一个简单的基准测试。

Soooo:** cloud sql postgres 可以在Firebase管理大约66(17.006.551 ns / op)的同时返回6000(198.650 ns / op)响应。**

我一定在这里做错了。即使postgres不扩展,它也可能会降低100倍,从而接近Firestore的性能,因为一个索引包含一个文档,而一个索引包含一个文档。

我使用以下标志从4-core, 8GB ram compute instance运行基准测试:

go test -bench=. -benchtime=1s -test.parallel=1 -cpu=1

这是我用于Firestore的基准:
func Benchmark_fetchSingle(b *testing.B) {

ctx := context.Background()

client, _ := firestore.NewClient(ctx, "project-123", option.WithCredentialsFile("key.json"))
defer client.Close()
for n := 0; n < b.N; n++ {
c,_ := client.Collection("documents").Doc("DOCUMENTID").Get(ctx)
c = c
}
}

这是用于云sql(postgres)的代码:
func Benchmark_sql(b *testing.B) {
psqlInfo := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s " +
"sslmode=require sslrootcert=server.chain.cert sslcert=client.cert sslkey=client.key",
"ip.address.0.0", "5432", "user", "password", "database")
sqldb, _ := sql.Open("postgres", psqlInfo)
stmt, _ := sqldb.Prepare(`select property1, property2 from documents where pk = $1;`)
defer sqldb.Close()

for n := 0; n < b.N; n++ {
rows, _ := stmt.Query("DOCUMENTPK")

rows.Next()
stuff := struct{
P1 string
P2 string}{}
rows.Scan(&(stuff.P1), &(stuff.P2))
stuff = stuff
rows.Close()
}
}

是否没有正确配置Firestore?
我认为也有spanner和bigtable作为no-sql的替代品-但它们的成本对于我的简单用例来说是巨大的(至少是估计,我发现这是非常不透明的)

最佳答案

在不结束有关如何度量事物的讨论的情况下,要解决性能问题非常困难,这在Stack Overflow上是不合时宜的。因此,我将尝试解释如何理解Firestore的性能特征,并希望您可以将其映射回所看到的结果。

Firestore的主要(也是非常独特的)性能保证是性能取决于结果集的大小,而不取决于集合的大小。用简单的话来说:如果从(例如)1,000个文档的集合中检索10个文档需要1秒钟,那么当该集合包含1,000,000或1,000,000,000个文档时,也将花费1秒来检索这10个文档。

请注意,这与实际性能无关,因为这取决于许多其他因素。它只是说说随着收藏的增长性能的变化。如:在这种情况下,性能不会改变。因此,尽管大多数数据库在基础数据库增长时(通常在O(n log n)附近)性能下降,但Firestore的性能却是平稳的(在检索10个文档的示例中为O(1)O(10))。

关于go - Cloud Firestore变得非常缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58858953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com