1
mingl0280 2023-03-10 08:10:28 +08:00 via Android
我个人认为这个需求的难度在系统提供者能提供多少上行带宽这个问题上……50 万 1k 的记录满打满算一个 G 都没有……
|
2
moult 2023-03-10 08:26:29 +08:00 via iPhone
这数据量,又是用唯一 id 查询的,持久化直接 mysql ,查询层加个内存级的缓存都足够了。都不需要啥高档家伙。
|
3
moult 2023-03-10 08:27:56 +08:00 via iPhone
不对。你面的是项目管理之类的岗位,不是开发吧。他主要考察写方案报告吧。
|
5
ragnaroks 2023-03-10 08:44:11 +08:00
只说这个需求的话,大学生都能做吧,准确的说 1t4g 的单容器实例 mysqld 都无压力,调下参数就行了,不用做任何额外优化
|
6
seashell2000 2023-03-10 09:07:15 +08:00
估计这公司的业务有这个需求了
|
7
chendy 2023-03-10 09:21:33 +08:00
除非机器内存非常紧张,500m 数据直接放应用里就行
再来个队列或者定时任务更新数据就完活了 |
8
liprais 2023-03-10 09:25:31 +08:00 via iPhone
读写分离完事
|
9
securityCoding 2023-03-10 09:31:15 +08:00 via Android
这么个玩意还能怎么设计,做个 local cache 打崩了算我输
|
10
JimmyChan1506 OP @seashell2000 从网上看到的题. 不过我算错数了, 算了要几百 G 才能全部缓存 ........
|
11
dayeye2006199 2023-03-10 09:38:01 +08:00 via Android
缓存,什么缓存,感觉一个数据库够了
|
12
AlexHsu 2023-03-10 09:47:39 +08:00
我觉得 chatgpt 说挺好
为了满足系统对数据的维护和第三方对数据的高效查询服务,可以采用以下方案: 数据库设计 为了实现高效的查询,可以将数据存储在关系型数据库中,使用索引来加速查询速度。每个记录的大小不超过 1KB ,因此可以选择使用 MySQL 或 PostgreSQL 等数据库来存储数据。 在数据库中,可以将业务 ID 设为主键,以便快速根据业务 ID 进行查询。同时,还可以添加一些辅助索引,以支持更复杂的查询操作。 数据库缓存 为了提高查询速度,可以使用缓存技术。可以使用 Redis 或 Memcached 等缓存服务器来缓存最常用的查询结果。 可以将每个查询结果缓存在缓存服务器中,并设置过期时间,以便缓存服务器自动删除过期的数据。当有查询请求时,先从缓存服务器中查找数据,如果缓存中没有数据,再从数据库中查询并将结果存储到缓存中。 查询服务设计 为了满足第三方对数据的高效查询,可以设计一个查询服务。查询服务的主要作用是处理第三方的查询请求,并返回查询结果。 可以使用负载均衡技术,将查询请求分配到多个查询服务器上,以实现高并发查询。每个查询服务器都可以连接到同一个数据库,并从缓存服务器中获取数据。 为了提高查询速度,可以使用异步查询技术。当查询请求进入查询服务时,查询服务可以将请求放入一个消息队列中,并返回一个查询 ID 。查询服务再从消息队列中读取查询请求,异步地查询数据库,并将查询结果存储到缓存服务器中。当查询结果准备好后,查询服务将结果推送给第三方。 批量查询 对于批量查询场景,可以采用以下方案: 首先,将查询请求按照业务 ID 进行分组,每组查询的业务 ID 数量不超过缓存服务器的最大连接数。然后,将每组查询请求发送到不同的查询服务器上,由每个查询服务器异步地查询数据库和缓存服务器,并将查询结果返回给查询服务。 查询服务将每组查询结果进行合并,并将合并后的结果返回给第三方。由于每组查询请求的业务 ID 数量是相同的,因此可以保证每次查询的速度基本一致。 |
13
brader 2023-03-10 09:48:41 +08:00
区区 50W ,直接用 mysql ,如果担心有频繁的删改影响查询的话,最多做个读写分离
|
14
JimmyChan1506 OP @AlexHsu chatgpt 威武
|
15
Desdemor 2023-03-10 09:58:20 +08:00
用 clickhouse + kafka 咋样, 一个读一个批量写
|
16
dongtingyue 2023-03-10 09:59:29 +08:00
mysql 百万数据量走索引, 排行榜数据秒出。
|
17
pengtdyd 2023-03-10 10:05:45 +08:00
我觉的这个问题问的应该是如何解决在增、删、改的情况下,解决复杂查询速度很慢的问题。复杂查询多表 join 的这种情况查询速度很慢,导致查询服务基本处于难以使用的状态。
这种 i 情况基本上难以解决了,一般老旧的系统,架构师水平很差,多批人经手的系统,最容易出现这种情况,基本无解,除非重构它,前期业务逻辑没有理清,数据库表随便加,字段随便改,最后查一个简单的用户信息都要 join N 多张表,这种情况还提供什么高效的查询服务,算了毁灭吧。 |
18
sadfQED2 2023-03-10 11:04:37 +08:00 via Android
@Desdemor ck 并发读性能很差啊
@JimmyChan1506 MySQL 读写分离,读库前面再套 HA ,读 QPS 几万肯定没啥问题 如果硬要用缓存方案,几百 G 算啥呀,内存型服务器,内存都是说多少 T 。哪怕是用普通通用型服务器,redis 也是集群呀,数据量大你又不是单机 |
19
esee 2023-03-10 11:06:00 +08:00
50 万的量还要怎么设计啊,我 1C2G 的 mysql 存了几千万的数据量查询性能都没下降。50 万的量不是闭着眼睛写都行么。。
|
20
learningman 2023-03-10 12:48:41 +08:00
有个 Azure 的运维拿 CPU 核心图玩俄罗斯方块的视频,那个视频里演示用的机器有 2T 内存
|
21
thtznet 2023-03-10 13:04:15 +08:00
没有预算前提的设计方案都是扯淡,实际上所有的技术方案最终出台都和技术没关系,钱才是核心问题
|
22
aqqwiyth 2023-03-10 14:03:47 +08:00
500M 数据还考虑啥, 直接加载到内存
|
23
PythonYXY 2023-03-10 14:20:30 +08:00
提供信息太少了,说下查询和写入 QPS 、查询方式主要是什么(点查,范围查)、成本等信息。还有 OP 说几百 G 的数据具体是什么,大约有多少?
|
24
sunmacarenas 2023-03-10 14:40:26 +08:00 via Android
上个 1T 的 SAP HANA 就可以了
|
25
crazycarry 2023-03-10 16:27:09 +08:00
50w 洒洒水都没有
|
26
morty0 2023-03-10 16:43:36 +08:00
提供给第三方用, 要考虑一下鉴权, 加密, 限流等
|
27
cassyfar 2023-03-10 16:57:32 +08:00
redis master-slave
|