V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  crclz  ›  全部回复第 34 页 / 共 35 页
回复总数  684
1 ... 26  27  28  29  30  31  32  33  34  35  
2019-10-25 21:06:32 +08:00
回复了 lau52y 创建的主题 分享发现 闲鱼啥都不能发,虚拟商品,有啥能发个人技能的地方么
猪八戒 之类的。(我说猪八戒不代表它是最好的)
2019-10-25 21:00:40 +08:00
回复了 nandehutu 创建的主题 程序员 准备创业,老哥们给帮忙起个名字,叫什么好呢?
真金白菜
2019-10-25 10:00:23 +08:00
回复了 ksedz 创建的主题 程序员 数据库的发展趋势是什么?
NoSQL 的建议看一下《 NoSql 精粹》,里面讲了不同的 nosql 数据库的擅长的地方、与关系型数据库的对比。挺薄的一本书的。作者是(著名的) Martin Fowler。
2019-10-17 16:33:18 +08:00
回复了 zaiyuzhong 创建的主题 程序员 NetCore 调查:大家谁在使用 NetCore 写 WebApi 或者其它东西
@chinvo 哈哈,其实很多人不知道 docs
2019-10-12 16:28:06 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@PopRain 测试过程没问题,但是我错了,应该不是 record-lock. 而是 next-key lock. Innodb ReadCommited 下 For Share 不能防止插入,说明不是 record-lock ( mysql 没怎么用过所以也没有去监视测试过程中是啥锁。) RepeatableRead 下,可以防止插入,刚刚去看一下文档,发现是 next-key lock.
”等于“的查询条件可以触发 next-key lock(index record lock + gap lock),但是粒度较大,绝对不止一个值的粒度,(如 @EmdeBoas 所说)会不好控制。。由于 mysql 的 gap lock 不好控制,所以 postgres 的 gap lock 功能缺失看起来还非常能接受...所以还是决定多点考虑业务逻辑上的控制吧。
也谢谢你 @PopRain 让我做了进一步的测试,不然很多错误的认知又会伴随着我以后的开发,那带来的错误是无法想象的。
2019-10-12 15:15:11 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@PopRain 刚刚测试了一下 mysql,是有效的。
c#运行 Select * From Users Where Username='bzzb' For Share 然后遇到断点,挂起
然后 workbench 里面 Insert Into karroo.Users Values(1,'bzzb','a','a',1,2)
然后发现 Insert 的事务阻塞了
2019-10-12 14:54:48 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@PopRain SQL SERVER 的我看了一下确实要求 serializable 级别,之前没看到。但是 mysql 的那部分我觉得是语义上你没理解清楚。或者你可以去做一下实验。
2019-10-12 14:28:49 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@PopRain 微软文档的 name = 'Bill' 是相等条件吧。
还有我看了一下 innodb 的,确实不是 gap lock,而是 Record lock.
innodb-locking 文档 (链接在上几个回复中,v2ex 不让发太多外链)
Record Locks
A record lock is a lock on an index record. For example, SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE; prevents any other transaction from inserting, updating, or deleting rows where the value of t.c1 is 10.
注意“inserting”这个单词,基本可以确定可以锁住不存在的行。
2019-10-12 13:37:44 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@PopRain

innodb
https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html
Gap Locks
A gap lock is a lock on a gap between index records, or a lock on the gap before the first or after the last index record. For example, SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE; prevents other transactions from inserting a value of 15 into column t.c1, whether or not there was already any such value in the column, because the gaps between all existing values in the range are locked.

A gap might span a **single** index value, multiple index values, or even be empty. (注意 single )

Microsoft SQL Server
https://docs.microsoft.com/zh-cn/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide?view=sql-server-2017#singleton-fetch-of-nonexistent-data
对不存在的数据的单独提取
如果事务中的查询试图选择不存在的行,则以后在相同的事务中发出这一查询时,必须返回相同的结果。 不允许其他事务插入不存在的行。 例如,对于下面的查询:
SELECT name
FROM mytable
WHERE name = 'Bill';
键范围锁放置在与从 Ben 到 Bing 的名称范围对应的索引项上,因为名称 Bill 将插入到这两个相邻的索引项之间。RangeS-S 模式键范围锁放置在索引项 Bing 上。 这样可阻止其他任何事务在索引项 Bill 与 Ben 之间插入值(例如 Bing )。
2019-10-12 10:45:33 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@xuanbg 假如我有多个方法都会存在好友关系的操作,假如这些方法是不同语言写的,最终还是得回到数据库的锁上面。
2019-10-11 23:24:44 +08:00
回复了 zgqq 创建的主题 Java 后面不太敢用阿里的开源库了
说到 json,我必须得提一下微软在.net core 3.0 ( 9 月正式版)中引入了自己的 json parser 来替代原有的 Newtonsoft.Json. 因为.net core 3.0 已经 preview 了相当长一段时间了,所以我尝试了迁移项目,结果 http 响应(json)有个地方老是不对。调了很久,恍然大悟:一定是新 json 库的锅!
2019-10-11 23:20:29 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@tabris17 对,我也想过这种方法。这种方法本质上和网上的“mysql 乐观锁”很像。网上的“mysql 乐观锁”和这段代码都有一个特性,就是:在只有 if..then 这个逻辑的时候很好用,但是语句再多一个,就不行了:比如 if p then insert xxx and update yyy. 这时候就不行了。
2019-10-11 22:42:27 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@lovelife1994 这个也考虑过,但是多增加一个 redis 会大幅度增加开发复杂度,并且你有没有想过 redis 和 postgres 已经构成了一个分布式系统了,保证一致性必须付出额外的开发量。假如在提交 postgres 事务前向 redis 发出的(释放锁的)请求失败了,如何保证这个锁被释放?那又得增加开发量(比如 redis 锁一段时间自动过期),并且退化到了最终一致性。
postgres 的 serializable 我今天读了无数遍官方的文档、wiki(ssi, serializable),也做了实验,发现不能解决我提到的应用场景。去网上(外网,内网)搜发现基本没有 serializable 的资料,更何况 postgres 的 serializable。我最后想,postgres 的 serializable 有点坑,还是不入好了。
2019-10-11 22:33:02 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@chinvo 但你不觉得这样不太优雅么?明明用 mysql 的特性(刚刚去查了 sql server 的微软文档,发现 sql server 也支持同样的特性)可以优雅的设计逻辑清晰的表结构,而轮到 postgres 就不行了。
2019-10-11 22:29:42 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@tabris17 就是我想要往 B 表插数据,前提是 A 表中不存在符合条件 p 的数据。现在开始事务,然后检测到 A 表里面不存在符合条件 p 的数据,然后在事务即将向 B 表插入数据的时候,有人往 A 表插入了符合条件 p 的数据。求如何防止这人往 A 表里面插符合条件 p(一般是唯一索引)数据。(postgres)。
2019-10-11 22:25:09 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@chinvo FriendRequest 字段 senderId, receiverId, message, isHandled, isExpired... 。Friendship 字段 userId, hisId, 好友备注, isBlocked .... 合在一起不合适吧。
2019-10-11 22:08:31 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@lovelife1994 假如不存在好友关系( Friendships 表),才能发送好友请求( FriendRequests 表),是两个表。
2019-10-11 20:50:41 +08:00
回复了 crclz 创建的主题 PostgreSQL postgres 如何锁住一条不存在的记录?
@zhengwhizz 看清楚再答题
2019-01-26 09:35:01 +08:00
回复了 BBrother 创建的主题 Visual Studio Code 感觉 vscode 渐渐变得不好用了,大家有同感吗?
js、ts、c#提示完美; go、python 提示有延迟
2019-01-26 09:32:18 +08:00
回复了 BBrother 创建的主题 Visual Studio Code 感觉 vscode 渐渐变得不好用了,大家有同感吗?
@mooncakejs c++是插件烂的一批
1 ... 26  27  28  29  30  31  32  33  34  35  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1028 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 23ms · UTC 19:46 · PVG 03:46 · LAX 11:46 · JFK 14:46
Developed with CodeLauncher
♥ Do have faith in what you're doing.