在小内存服务器上,高效处理 30 万次/天 API 请求的数据库与缓存优化方案?

2 天前
 mxdyeah

问题:
我有一个 Django 项目和一个 PHP 项目,用于提供 电子节目单( EPG ) 服务,每天大约 30 万次 API 请求。服务器配置较低,只有 4G 内存。我需要在 数据库( MySQL 、PostgreSQL )缓存( Redis 、Memcached ) 方面进行优化,以提高 API 响应速度并减少资源占用。

具体问题如下:

  1. 数据库选择:在 MySQL 和 PostgreSQL 之间,哪种更适合小内存环境?
  2. 数据库优化:如何设置 连接数、缓存、索引策略 以减少内存占用并提高查询效率?
  3. 缓存方案:Redis 和 Memcached 在 EPG API 场景下,哪种更合适?如何高效缓存查询结果?
  4. 具体配置建议:对于 低内存服务器,推荐哪些数据库和缓存配置参数?

示例场景:

希望大家能分享一些 小内存服务器优化 API 处理能力 的经验!谢谢!

3729 次点击
所在节点    程序员
43 条回复
IDAEngine
1 天前
PostgreSQL + Kvrocks
Vegetable
1 天前
这场景想不到为什么要优化呢,缓存都有点多余其实。几万条数据全量缓存都没多大,Django 也不吃多少内存。
Outshine
1 天前
我觉得你的场景 `sqlite` 都行,然后直接做静态化,定时生成更新静态文件即可
zoharSoul
1 天前
30 万次无需任何优化
mysql 随便抗
caola
1 天前
我一直都在使用 redis 替代品 kvrocks ,可以说是硬盘版 redis , 缓存无压力
sunpj
1 天前
哈哈 乍一看 30w qps 感觉难度还挺大的 后面发现是 30w 一天 直接数据库就没啥压力 mysql 或者 pgsql 都可以 只要没有代码没啥问题 数据库不太可能成为瓶颈的 用不到 redis
naeco
1 天前
无压力
ferstar
1 天前
你这根本毫无压力好吧

1. db 建议无脑 PostgreSQL
2. 没有什么是 explain analyze 解决不了的
3. Redis 足够了,Django 2.0 以后也支持了协程,你把所有同步方法改写成异步,阻塞任务丢 Celery
4. host 内核版本升到 6.13.x ,最近合入了一个大佬关于 swap 的优化,性能暴增 400%,开上 4~8GB 的 swapfile ,bbrv3 也开起来,抗压能力嗖嗖的
gyinbj
1 天前
先上 cdn 再静态化 再上 redis
abccccabc
1 天前
楼主,php 敢不敢用 8.4 的?敢不敢用它的扩展 APCu ,缓存数据放 apcu ,反正是单机跑。根据我的感观,php8.1 比 php7.4 快多了。8.4 比 8.1 又要快一些。

我汇集了一条龙优化方案:参考下: http://biji.sebcxy.com/forum.php?mod=viewthread&tid=268&extra=page%3D1

各位高手:如果我写的方案有错误或者某些点还可以再优化的话,可以 @我。我补充或修改一下
murmurkerman
1 天前
哈哈哈,真担心性能要用 redis+go ,https://eieio.games/blog/scaling-one-million-checkboxes/
raptor
1 天前
我还以为是 1G 以下的内存,都 4G 了不算小。特别是以读为主的情况,更新又不多的,加个 redis 就是了,控制一下 redis 的内存用量就好,比如过期时间设置得短点,只缓存最热的数据等。内存占用的话,个人体会是 pg 会小一些,我在 256M 的机器上正常使用过 PG ,但是 mysql 小于 512M 基本没法用。
bronyakaka
1 天前
单机你这场景可能不需要 redis ,直接进程内缓存读写,最最快
mayli
1 天前
直接 sqlite 应该最快,
》 目前数据库存储有 数万条节目单数据,查询主要基于 频道 + 日期
要是只有数万的话,sqlite ,或者直接放内存也够。

小内存一般来说,数据不多,直接放内存也是够的。
数据量大的话,比如 10m 行以下,sqlite+索引也够,你这 epg 明显是可以做个索引完事。
crackidz
1 天前
只要不是大量瞬时动态请求,这请求量也并不高
pony2335
1 天前
异步数据批量落盘,能用内存的就内存 不行就 redis 、最后才是数据库操作,这么干的话,一天随便 30 万
Ipsum
1 天前
顶多加个 redis 缓存,对每次查询做缓存,ttl 差不多 6H 。先从 redis 读,如果没有就从数据库读然后写入缓存。写的话直接写数据库或者先写 redis 然后异步数据库,但是每天就更新几次,建议直接写数据库。4G 内存不小了。
seansong
1 天前
你这个访问量和配置,其实只要不写有问题的逻辑代码在里面,一般正常水准的代码,应该不需要优化技巧,就能跑吧
securityCoding
1 天前
lru 就行
proxyai
1 天前
我以为你每分钟 30 万次呢... 算了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1118618

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX