寻求个反内卷的分布式/集群数据库

2023-06-13 15:34:18 +08:00
 craftx
刚刚读了这篇: https://cloud.tencent.com/developer/article/1888474
结尾一句很精彩:总之,我们应该采用无聊的技术去构建创新的产品,而不是倒过来。
所以,我来寻求一个“无聊”的数据库。

我不想去学习和运维一个“创新”的分布式数据库,甚至不想去给数据库分表,这样可以更多将精力放在产品和其它更有价值的技术上。

我现在使用数据库的方法有两种:
1. 开发机器上用 docker 跑了一个数据库实例,随系统启动。
2. 卖盗版书给我还打死不赔偿的马老板家提供的云数据库。
这两种,我都不需要费心再学习和运维。它们对我,就是一个连接字符串。

但这两种使用方法并不总是能满足我的需求,原因有下:
1.一些系统的需求,更多是分析,而非交易。
2.一些系统的数据量很大。这些数据,可能是用于交易,也可能用于分析。
3.一些项目,客户要求私有化部署,也就是部署在客户自家的机房里,这些机房可能是不连外网的。

是的,很多“创新”的分布式数据库软件可以满足上面三项需求。
但很多“创新”的产品往往很反人类,用户体检很糟。他们需要我:
1. 学习他们的安装、运维、使用方法,这是一个漫长的过程。
2. 然后按照学到的,去安装、运维、使用,这会伴随着我渡过整个项目生命周期,尤其在项目开始时和半夜。
3. 新的东西往往很多坑,但文档往往不会高亮出自己的缺点。我的老板也不喜欢我告诉客户,自己开发的产品有哪些缺陷。

所以,我需要的是这样子的数据库:
1. 能够满足分析和交易的需求。我并不介意这两种需求是两种数据库分别满足的。
2. 学习起来很简单。最好文档能够秒懂。
3. 集群,运维简单。最好在每台服务器上执行一条命令,就可以拉起整个集群。当需要新增存储空间时,只需要将服务器连接到集群;不用担心集群中的某个节点半夜会挂掉或恢复。我并不介意集群类型是分布式,还是中间件实现的主备 /分片。
4. 使用简单。最好对于使用者来说,就是一条普通的连接字符串。最多是创建表 /集合时,简单声明下分布式 /集群配置。
5. 对硬件要求不高,不然我的老板会不高兴。
6. 当然,还得支持部署到不连外网的机房。

总之,作为成年人,我需要的是既要又要还要的数据库。
1898 次点击
所在节点    程序员
19 条回复
encro
2023-06-13 15:42:43 +08:00
你说的就是 pg
czfy
2023-06-13 16:28:33 +08:00
还要免费对吧?
winglight2016
2023-06-13 17:13:50 +08:00
@encro 我们测过 pg 的性能,相同配置的实例,在某些统计上比 mysql 快很多,但是一般的查询并没有比 mysql 快很多,甚至有些还慢,所以最终也没有用 pg 替换 MySQL 。

lz 的需求,也是我们目前碰到的,并没有太好的办法。只能建立 Hadoop 数仓,实时导数据进去,然后定期删除 MySQL 的历史数据。
bleaker
2023-06-13 17:17:04 +08:00
Clickhouse
encro
2023-06-13 17:48:21 +08:00
@winglight2016

当然,原理上也不可能性能差很多啊。。。

很多 pg 的索引其实都利用不上,我觉得适合是因为分布式和楼主需要数据库。

普通用户用 mysql 就行,有 OLAP ,物理视图,想要时序数据库,存 json ,又怕麻烦,就可以选择 PG 。

pg 跑 a 股历史分钟级数据应该没啥问题。

DuckDB 线性回归预测股价的例子 https://github.com/digoal/blog/blob/master/202209/20220902_01.md

选 PG 主要是有 https://github.com/digoal/blog
jones2000
2023-06-13 18:31:23 +08:00
对于开发来说,数据库只是用来存储, 用什么类型的库都可以,只要表结构设计合理就可以。 最终数据还是要读取到内存,计算。 再快的查询也没有直接读内存快。
机器硬件升级比优化来的快, 投几十 W 升级下硬件设备,第 2 天就可以看到效果。 这比招几个开发优化半年来的快,还不用招人,交社保, 硬件还能算固定资产。
zachwei
2023-06-13 18:37:56 +08:00
mysql
12wk34
2023-06-13 19:09:44 +08:00
使用 tiup 部署 tidb,只用在一台机器上执行一条命令( https://docs.pingcap.com/zh/tidb/dev/production-deployment-using-tiup
jin7
2023-06-13 19:40:44 +08:00
lealone
realrojeralone
2023-06-13 19:45:16 +08:00
@jin7 这玩意除了作者本人接的项目用,还有其他公司会用在生产环境吗?量级有多大?
documentzhangx66
2023-06-13 19:57:50 +08:00
当然是 Mongodb ,它学习成本低,在分布式数据库领域几乎拥有最多的案例、教程与各种技术帖子,而且按教程简单配置后,啥也不用管,用就完事了。最新版本的功能也全面。
vitovan
2023-06-13 20:22:13 +08:00
@documentzhangx66 #11 MongoDB 的 Aggregation 足以劝退楼主:

https://www.mongodb.com/docs/manual/tutorial/aggregation-zip-code-data-set/#return-largest-and-smallest-cities-by-state

```javascript
db.zipcodes.aggregate( [
{ $group:
{
_id: { state: "$state", city: "$city" },
pop: { $sum: "$pop" }
}
},
{ $sort: { pop: 1 } },
{ $group:
{
_id : "$_id.state",
biggestCity: { $last: "$_id.city" },
biggestPop: { $last: "$pop" },
smallestCity: { $first: "$_id.city" },
smallestPop: { $first: "$pop" }
}
},
// the following $project is optional, and
// modifies the output format.
{ $project:
{ _id: 0,
state: "$_id",
biggestCity: { name: "$biggestCity", pop: "$biggestPop" },
smallestCity: { name: "$smallestCity", pop: "$smallestPop" }
}
}
] )
```
my3157
2023-06-13 20:29:35 +08:00
试试 ScyllaDB
documentzhangx66
2023-06-13 20:44:53 +08:00
@vitovan

如果这就劝退,这边建议换个行业呢亲。
vitovan
2023-06-13 21:01:49 +08:00
@documentzhangx66 #14 我是担心这个不符合楼主的要求:

> 2. 学习起来很简单。最好文档能够秒懂。

如果楼主是从 SQL 角度来看的话,这个可能会比较反直觉。

如果楼主是 JavaScript 熟练工的话,这个应该还好。
craftx
2023-06-13 22:40:28 +08:00
@vitovan 我确实是 js 的熟练工。
mongodb 运维的麻烦、arggregate 的便捷和坑,我都领教过
litguy
2023-06-14 08:10:37 +08:00
试试 tidb 吧
bthulu
2023-06-14 08:57:42 +08:00
阿里云数据库是可以私有化部署的, 需要跟阿里去谈判, 就是会贵很多.
craftx
2023-06-14 09:45:33 +08:00
@bthulu 刚刚调研了 oceanbase ,专为大型系统设计,我折腾了一天,都没跑起来

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

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

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

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

© 2021 V2EX