V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  fuyufjh  ›  全部回复第 1 页 / 共 21 页
回复总数  418
1  2  3  4  5  6  7  8  9  10 ... 21  
搞艺术的想象力都很丰富吧?但凡认识一个女程序员都不会写下这么小众的文字
150 天前
回复了 MareDevi 创建的主题 大学 北邮和大连理工选哪个
工作这么多年,一个大连理工的人都没见过。北邮的还是不少的。
177 天前
回复了 EVJohn 创建的主题 iPhone 看 15/15pro 的价格很心动啊,买 15 还是等 16
16 (非 Pro ) 会上 8GB 内存,比 15 多了 2GB
222 天前
回复了 jov1 创建的主题 程序员 请教一个数据库或代码的唯一性设计问题
忍不住直接丢给 GPT-4 了,以下是它的回答:

你的需求是实现一个层级配置功能,其中层级关系由三个字段( a, b, c )定义,并且需要确保配置的数据项在同一层级上不重复。根据你的描述,这里是一个典型的树形结构,其中 a 是第一层,b 是第二层,c 是第三层。

为了解决你目前面临的问题,可以考虑以下几个设计思路:

### 1. 使用路径枚举模型( Materialized Path )

在这种模型中,你可以为每个节点存储一个路径字符串,该字符串反映了从根到该节点的完整路径。例如:

- "1" -> "1/"
- "1,2" -> "1/2/"
- "1,2,3" -> "1/2/3/"

在查询时,你可以使用路径来检查是否存在重复的层级配置。例如,要检查是否存在与"1/2/3/"相同或更高层级的配置,只需要查询路径以"1/2/3/"开头的记录。

### 2. 使用左右值模型( Nested Set )

这种模型适用于存储层级数据,每个节点都有一个左值和一个右值,通过这两个值可以快速查询节点的子节点和父节点。但是,这种模型在插入和删除操作时需要更新大量记录,可能不适合频繁变动的配置。

### 3. 使用 Adjacency List 模型并增加唯一性约束

这是最简单的层级数据模型,每个节点都有一个指向父节点的外键。在你的情况下,可以在表中添加唯一性约束来确保同一层级的配置不会重复。

例如,你可以在数据库表中创建一个唯一索引:

```sql
CREATE UNIQUE INDEX idx_unique_config ON t(a, b, c);
```

这样,数据库将自动保证不会插入重复的层级配置。

### 4. 使用闭包表模型( Closure Table )

闭包表存储每个节点与其每个祖先之间的关系。这种模型查询快速,但是需要维护一个额外的表来存储关系。

### 5. 使用触发器或应用层逻辑

你可以在数据库层使用触发器来阻止违反层级规则的数据插入,或者在应用层实现逻辑来确保数据的一致性。

### 结合你的需求

你的需求似乎最适合使用路径枚举模型,因为它可以很容易地通过字符串比较来检查层级关系。你可以这样设计:

1. 在表中添加一个额外的字段,比如 `path`。
2. 当插入新记录时,根据 a, b, c 的值生成路径字符串。
3. 使用这个路径字符串来检查是否有重复的层级配置。

例如:

```sql
-- 假设你要插入新记录
SET @new_a = '1';
SET @new_b = '2';
SET @new_c = NULL;

-- 生成路径字符串
SET @new_path = CONCAT_WS('/', @new_a, IFNULL(@new_b, ''), IFNULL(@new_c, ''));

-- 检查是否存在重复的层级配置
SELECT COUNT(*)
FROM t
WHERE path = @new_path OR path LIKE CONCAT(@new_path, '/%');

-- 如果计数为 0 ,则可以插入新记录
```

这种方法可以避免你当前面临的问题,并且可以很容易地扩展到更多层级。
223 天前
回复了 OliverDD 创建的主题 程序员 对数据库感兴趣,但完全接受不了 cpp
看看大数据,Spark 、Hive 、Trino 这些,语言以 JVM 系的为主,查询路径上的知识差不多太多,存储、事务之类的被大幅简化了
364 天前
回复了 V2asker 创建的主题 浏览器 下面哪款浏览器更安全?
chrome 套皮能列出 100 个 😄
2023-11-08 13:41:12 +08:00
回复了 Aluhao 创建的主题 MySQL MYSQL8 正式环境有必要关闭性能架构 performance_schema=OFF
fyi. 阿里云 RDS ,8GB 及以上内存的实例默认 on ,否则 off
2023-10-02 15:38:14 +08:00
回复了 xieyuheng 创建的主题 程序员 [连载] 用文件系统做数据库 之一 设计文档
你需要的是 kv store

虽然文件系统也可以看作是一个面向大 value 、没有 ACID 事务的 kv store ,但显然不推荐这么用
2023-08-09 23:49:20 +08:00
回复了 sdjl 创建的主题 问与答 你身边有没有那种 “没有兴趣爱好的人” ?
也有过完全一样的困惑。

有过这么一些同事,30 岁上下的年纪,不刷短视频不看 B 站不打游戏不看书,也不是一直加班

他们的时间都是怎么消耗掉的???
2023-07-04 07:37:10 +08:00
回复了 hwaphon 创建的主题 投资 [买房] 铁子们,现在杭州的房子能上车吗
二手房成交惨不忍睹,又到了赌国运的时候了
2023-07-04 07:36:03 +08:00
回复了 a132811 创建的主题 问与答 哪里能获得过去 50 年各城市、地区的夏天高温度数据?
2023-07-03 13:45:43 +08:00
回复了 beren11129 创建的主题 分享发现 大陆工资的隐形税率
我国最大的税不是土地出让金么😄
2023-06-12 15:33:54 +08:00
回复了 kerie 创建的主题 问与答 请教一个 Flink SQL 的问题,解决了星巴克感谢
@kerie 我是觉得不应该用 Flink 做。Streaming 擅长增量计算,这个问题本质是一个全量计算,“全量”指最近 1min 的全量数据。

我觉得用数仓、定时 1min 查一次是最合适的。

Flink 的理念是 event-driven ,反过来说,如果没有 event 则不该触发任何计算。举个简化的例子,如果这 1min 内没有任何订单,你应该也希望得到一个全部 count=0 的结果吧(而不是什么也不输出),那么这就与 event-driven 相违背了。
2023-06-12 13:42:19 +08:00
回复了 kerie 创建的主题 问与答 请教一个 Flink SQL 的问题,解决了星巴克感谢
这是一个典型的 micro batch 需求吧,1 分钟执行一次。用时间条件做过滤能起到很好的过滤效果,执行很快的
500 Error
毫不夸张地说,这是我见过的完成度最高的个人项目,文档也很棒,太强了!!
2022-12-04 19:58:31 +08:00
回复了 xdd2100 创建的主题 职场话题 现在收到国外的工作 offer,可以办到护照吗?
@qwertqwert12345 现在出境必须向海关提供足够的资料证明你属于商务、工作、学习、探亲(直系亲属)中的一项,其中签证是必查的一项
2022-08-04 14:16:28 +08:00
回复了 levelworm 创建的主题 分享发现 看到一个 Java 的 TUI 库感觉还做得蛮不错的
写 Java 的人一般对 tui 没有太多执念吧
2022-06-06 11:21:42 +08:00
回复了 dtgxx 创建的主题 问与答 PG 和 ES 的全文索引性能差不多吗?
MySQL 也支持全文索引啊
1  2  3  4  5  6  7  8  9  10 ... 21  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3130 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 39ms · UTC 13:57 · PVG 21:57 · LAX 05:57 · JFK 08:57
Developed with CodeLauncher
♥ Do have faith in what you're doing.