V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  yjhatfdu2  ›  全部回复第 3 页 / 共 6 页
回复总数  103
1  2  3  4  5  6  
231 天前
回复了 xyxy 创建的主题 数据库 海量数据存储问题,求大佬们指导选型
你这量,只要不是要求一次几亿的数据聚合秒级结果,直接 pg+时间列 brin 索引解决了,然后老数据定期归档
云场景、实时性要求不高的场景有成本和灵活性优势,非云场景或者实时性要求高的场景就不适合了
补一个 window 的,i510 代标压 edge ,12 分
@zzxqd 主要影响的是加载时间和复杂 webapp 的响应速度,同时反过来也会影响能效,顺便,现在兼容性最差和功能缺失的可不一定是 webkit ,https://web.dev/blog/interop-2023
@zzxqd 看一下刚更新的 speedometer3.0 ,已经更加贴近各种实际场景了,也是 G 、M 等共同参与的 https://webkit.org/blog/15131/speedometer-3-0-the-best-way-yet-to-measure-browser-performance/
@yjhatfdu2 更正:50 米内点的数量
@249239432 我单机 pg 查了 1000w 个点,每个点附近 50 个点的数量(平均 5 个左右)也就 20 分钟
explain analyse select id,(select count(*) from geo where st_dwithin(point,g.point,50)) from geo g;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------
Seq Scan on geo g (cost=0.00..165365708334.00 rows=10000000 width=12) (actual time=1.076..1049434.731 rows=10000000 loops=1)
SubPlan 1
-> Aggregate (cost=16536.54..16536.55 rows=1 width=8) (actual time=0.105..0.105 rows=1 loops=10000000)
-> Index Scan using geo_point_idx on geo (cost=0.54..16534.04 rows=1000 width=0) (actual time=0.027..0.104 rows=14 loops=10000000)
Index Cond: (point && _st_expand(g.point, '50'::double precision))
Filter: st_dwithin(point, g.point, '50'::double precision, true)
Rows Removed by Filter: 7
Planning Time: 0.756 ms
Execution Time: 1049626.246 ms
(9 rows)

Time: 1049627.962 ms (17:29.628)
@249239432 计算次数和算法是很有关的,比如你要圈每一个点附近 50 米的所有点,你可以两次 for 循环每两个之间算一次,也可以排序/索引之后,每个点只需要用 LogN 次查询
241 天前
回复了 avadakur 创建的主题 程序员 关于数据库高并发插入的版本号问题
@shinelamla 你这样的问题也是高并发下,失败概率会很高
241 天前
回复了 avadakur 创建的主题 程序员 关于数据库高并发插入的版本号问题
如果是 pg 的话,可以考虑用 advisory_lock,读之前针对 user_id 的值加锁,更新完解锁,这样不会对表或者行加高级的锁,避免影响其他业务,也可以避免引入 redis 带来的通讯开销,应该是性能非常高的方案了
241 天前
回复了 avadakur 创建的主题 程序员 关于数据库高并发插入的版本号问题
@shinelamla 这个是个典型的不可重复读问题,在 RR 的隔离等级下,这种情况不被允许,一般来说,后一个提交的事务会失败,以避免数据不一致
241 天前
回复了 avadakur 创建的主题 程序员 关于数据库高并发插入的版本号问题
如果不是必须先获取当前 version 做业务操作然后再更新,那么直接 update version set version=version+1 where xxxx 就可以了,如果必须先获取 version 再做一些业务操作再更新,就得开事务了,然后高并发的情况还得考虑事务失败概率高的问题,可以根据你的数据库实际情况考虑使用显式锁来减少事务冲突导致的失败
241 天前
回复了 avadakur 创建的主题 程序员 关于数据库高并发插入的版本号问题
开事务
@249239432 你估计没排序吧,你这算法复杂度有点高排个序应该就是 ONLogN 了
@249239432 你这也太离谱了,我给你看看 postgis 的测试结果,笔记本上运行( m1max )。
创建一个测试表,并用使用 WGS84 坐标系,创建 1000w 条测试数据,平均分布在经度 120-130 ,纬度 60-70
postgres=# create table geo(id serial primary key,point geography);
CREATE TABLE
Time: 8.159 ms
postgres=# insert into geo(point) select st_point(120+10*random(),60+10*random(),4326) from generate_series(1,10000000);
INSERT 0 10000000
Time: 22743.621 ms (00:22.744)
postgres=# select count(*) from geo;
count
----------
10000000
(1 row)

Time: 184.563 ms
直接查找 500m 内的点
postgres=# select id,st_astext(point) from geo where point<->st_point(121,61,4326) <500;
id | st_astext
---------+----------------------------------------------
462445 | POINT(120.99758165008446 60.99813696562379)
1438617 | POINT(121.00541966217078 61.00254115685877)
6427771 | POINT(121.0057518866478 60.99946005998968)
7239910 | POINT(121.00062919717045 61.00302782747821)
480378 | POINT(121.00686930870204 60.99929456226042)
6463221 | POINT(121.00448273536959 60.99901955735362)
7497972 | POINT(121.00128087999187 61.000266168985476)
9546292 | POINT(121.00044691737057 61.00368666618427)
9594039 | POINT(121.00070061094034 60.996584053665245)
(9 rows)

Time: 897.110 ms
创建 GIST 索引后使用 ST_DWithin 函数可以使用索引加速
postgres=# select id,st_astext(point) from geo where ST_DWithin(point,st_point(121,61,4326),500) ;
id | st_astext
---------+----------------------------------------------
7497972 | POINT(121.00128087999187 61.000266168985476)
9594039 | POINT(121.00070061094034 60.996584053665245)
6463221 | POINT(121.00448273536959 60.99901955735362)
9546292 | POINT(121.00044691737057 61.00368666618427)
1438617 | POINT(121.00541966217078 61.00254115685877)
7239910 | POINT(121.00062919717045 61.00302782747821)
462445 | POINT(120.99758165008446 60.99813696562379)
480378 | POINT(121.00686930870204 60.99929456226042)
6427771 | POINT(121.0057518866478 60.99946005998968)
(9 rows)

Time: 10.359 ms
只要 10 毫秒,比你们快至少 3 亿倍

只能说废公司是贵物
这代码加这个/就是为了删你的数据吧,有毒
350 天前
回复了 kerwenard 创建的主题 iPhone 想问一下买了 15pro 的各位,续航血崩吗?
@icenine 我也是,升级 17.1.1 后基本解决了
应用程序连接,连不上后看数据库日志里面的报错,应该可以看到尝试连接的数据库名,然后改成这个就行了
@Liang 可以挂个 iCloudpd 自动同步到本地,或者网页版 iCloud 批量下载
2023-10-20 16:46:02 +08:00
回复了 dexlee2020 创建的主题 Apple TV 老电视 1080P 有必要上最新款 7 代 128G 吗?
低端的确实没法看的,辣眼睛
1  2  3  4  5  6  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   951 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 20:38 · PVG 04:38 · LAX 12:38 · JFK 15:38
Developed with CodeLauncher
♥ Do have faith in what you're doing.