V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  timethinker  ›  全部回复第 18 页 / 共 19 页
回复总数  374
1 ... 10  11  12  13  14  15  16  17  18  19  
2021-04-27 16:58:01 +08:00
回复了 Stupidbanana008 创建的主题 数据库 物联网相关,怎么选数据库?
这种是日志型数据,即追加写的方式记录全量数据,所以要用到日志型数据库 /消息队列,后续消费可以进行批量处理或者流处理,产生派生数据(即基于记录的全量日志数据衍生出来作为分析目的数据模型)。

就像楼上各位说的,可选的工具很多,如果是需要实时分析的,我个人可能会使用 kafka,然后用各种消费者去生成派生数据,可以根据规模对消息进行分区,这样做是为了将写入和计算并行处理,提高整体处理的吞吐量。
2021-04-27 12:03:45 +08:00
回复了 echooo0 创建的主题 程序员 关于 mysql 数据读取不一致的问题
建议看一下数据库内的数据实际上到底有没有更新数据。
然后在检查方法缓存的问题。
另外如果两个操作不是在一个线程内同步进行的(顺序执行),在异步的情况下有可能会导致第二个比第一个先执行,虽然几率很小,但很多情况下都是由于微小的失误造成的。
2021-04-25 15:25:48 +08:00
回复了 zxCoder 创建的主题 问与答 关于数据库丢失更新问题和已提交读的关系
读已提交并不会覆盖未提交的数据,而是覆盖了另一个已提交的数据。

一般来讲,在读已提交的隔离级别下,如果两个事务试图尝试对同一条记录进行更改,那么就会推迟第二个事务的写,直至第一个事务提交或终止,具体采用的就是行级锁。

比如,两个并发的请求,尝试对一个计数器增加 1 的操作,很显然其中一个需要等待另一个事务提交或终止。
A 读取了计数器,假设为 100,+1,写回。
B 读取了计数器,假设为 100,+1,写回。
两个事务在开始的时候都读取的 100,但是经过自己+1 之后,都是 101,在写回的时候就会出现问题(业务上正确的应该是 102 才对)。
实际上这种操作属于覆盖,在读和写之间并不是原子的,也就是一个事务覆盖了另一个事务的写,破坏了数据的完整性,这就是丢失更新问题。就像是在 Java 多线程并发编程中,如果你不把一个静态变量声明为 volatile,且在加锁的代码块里面再次判断这个变量是否等于之前已知的状态,就有可能会发生覆盖(原子比较+设置),例如 Java 的单例双重检查。

解决这个问题可以对行数据增加乐观锁版本号(也就是原子比较+设置),在事务中对写入结果进行判断,例如:
UPDATE counter SET count = 101, version = 1 WHERE version = 0
如果结果返回影响数据为 0 条(代码判断),则终止当前事务,防止发生覆盖。也可以用 SELECT FOR UPDATE,加独占锁,这样另一个事物在读取同一条数据的时候会被阻塞。
2021-04-25 13:09:39 +08:00
回复了 seagull7558 创建的主题 MySQL 条件跨数据库了 如何分页查询
在不修改表的前提下,可以将 B 表的相关特征(例如需要排除的一些条件列)同步到 A 表的库中(也就是说在 ra 建立一张新的表,用于存储 rb 的 B 表的部分数据,这一部分数据就是 B 表的子集)。同步的时机取决于对延迟的要求,可以定时同步,或者在更新 B 表的时候立即同步。

同步过来的这些数据跟 A 表应该具有某种对应关系吧,例如包含 XX 值、或者有外键关联的信息,这样就可以直接用 SQL 去过滤 A 表的数据了。
2021-04-23 14:12:33 +08:00
回复了 ZZSZZSZZS 创建的主题 iOS 知乎利用播放音频保活?
早就卸载知乎了,另外账号资料信息全部改掉了,然后改了一个随机密码丢掉了。
https://www.tongyongpe.net/
制作简单,工具全
2021-04-21 10:25:37 +08:00
回复了 Moyudawang 创建的主题 Android Android 项目多个 Jar 包有命名空间冲突,有办法解决吗?
自己实现一个类加载器,加载不同 SDK 的 jar 可行性如何?
就是说把厂商 SDK 的 jar 当做文件资源,不直接通过 gradle 打包,而是使用动态加载的方式载入需要的依赖。
@gbj OK,有值的情况下又不一样了,这个涉及到属性命名策略( PropertyNamingStrategy )以及你使用的是什么 JSON 库,如果你使用的是 SpringBoot 默认没有配置的话,那么默认用的是 Jackson,命名策略好像是骆峰式。

你让前端把字段名大小写改一下,或者使用 @JsonProperty 注解你的 VO 字段。
包装类型默认为 null,你这里 Integer 、BigDecimal 因为没有默认值,所以这个结果是符合预期的。
2021-04-15 14:08:34 +08:00
回复了 AhogeK 创建的主题 问与答 因为把公司 Mysql 一堆带 null 字段优化非空带默认值被骂
@GGGG430
1 、NULL 值并没有比空字符串占用更多的空间,反倒是如果一个列本身用 NULL 是很自然的选择,但是强行给了一个默认值,那么这个默认值反而比 NULL 值所占用的空间更大。
2 、关于索引,如果索引的值本身就很稀疏,那么使用默认值来替代 NULL 并不会有什么帮助( b-tree )。
3 、还是那句话,取决于使用场景和数据库 /存储引擎,如果明确告诉你使用 NULL 就会有问题,那么这个时候才应该考虑是不是要做此类优化,提前优化是万恶之源,而且此类优化效果也是微乎其微的,只是它的不利影响被放大了。

数据库 /存储引擎有很多选择,版本也有很多,很多网上的奇淫技巧只针对于特定的版本有效,没有必要纠结在这些小问题上,国内很多公众号、技术文章现在基本上都是广告居多,颇有点中医理论的味道。
2021-04-15 13:52:21 +08:00
回复了 codeismylife 创建的主题 问与答 有严格遵守 RESTful 范式的朋友吗?
的确是有很多公司用统一的包装体来返回所有的数据,我个人认为这是没有必要的。
首先,在成功的情况下,code 和 message 是没有意义的,前端也只会取里面的 body 字段。
其次,在失败的情况下,body 字段一般都为 null 。
就先前面几位说的,如果在失败的情况下不使用 HTTP 4XX 状态码,而全部使用 200,对外部的监控 /采集系统来说也确实不太标准。
所以这个包装体在成功或者失败的情况下都存在冗余字段。
我们目前对于成功的请求( 2XX ),只返回数据本身,不同的接口直接返回不同的数据。
失败的情况下才会返回统一的错误数据结构,比如 code 、message 。
2021-04-15 13:31:23 +08:00
回复了 AhogeK 创建的主题 问与答 因为把公司 Mysql 一堆带 null 字段优化非空带默认值被骂
NULL 值会影响索引?关于这一点我觉得还是要看场景,如果仅仅只是用空字符串或者 0 来替代 NULL 值,我觉得是没有必要的。也取决于用的什么数据库 /存储引擎。
2021-04-13 10:57:05 +08:00
回复了 Tarken 创建的主题 问与答 有想要戒烟的朋友吗,电子烟可以帮助戒烟吗?
+1 给自己洗脑,不要尝试通过意志力或者自制力,这样会很痛苦,而且大概率经受不住诱惑。
粗略认知到一件事情的好坏还不足以影响情感大脑对一件事情的进行彻底的反思,除非遇到重大转折点。
那么有没有一种没有痛苦的戒除不良习惯的好方法?
答案是有!
《暗时间》里面说,习惯之所以难以改变,是因为它是自我巩固的,越用越强,越强越用。能够从容的改变既有的习惯,靠的不是意志力或者自制力,而是知识。
《这本书可以帮助你戒烟》则是比较针对性的给你洗脑,值得一试。
2021-04-13 10:00:44 +08:00
回复了 LeeReamond 创建的主题 问与答 数据库单表查询速度慢的瓶颈在哪里?
这里面涉及到太多的内容了,楼主如果实在想要了解的话推荐一本书《数据密集型应用系统设计》。书本身的内容简单易懂,并且引用了大量的文献资料以便深入阅读。
2021-04-12 16:45:39 +08:00
回复了 Dogod37 创建的主题 Java web 页面转换为实时图片
也许在客户家里装个监控摄像头更合理一些。[狗头]
2021-04-12 15:20:50 +08:00
回复了 Dogod37 创建的主题 Java web 页面转换为实时图片
前端实现就是把整个 dom 转换为图片吧,有一个库叫做 dom-to-image,然后上传到服务器。
如果想要后端实现的话,想一下,一个网页的构成为 HTML+CSS,这意味着你要在服务器上面渲染一个页面,包括同步客户端上的操作(跟客户端保持一致),很难想象为什么要这样做。后端一般只是单纯的记录日志,比如用户点了啥,这种活动追踪只记录相关的日志信息比较好实现。
2021-04-12 11:29:39 +08:00
回复了 rikka 创建的主题 问与答 要在几千台机器上部署穿透程序, frp or nps?
我目前用的 frp,需要配置手动写配置文件,暂时没有遇到什么问题。nps 没有测试过,不过看介绍优点是可以动态管理配置信息不需要重启服务,两个都是 go 写的,部署也比较方便。

不过你这个几千个节点建议还是自己测试一下才能知道最后的结果是啥,转发服务器的带宽配置也需要考虑。
2021-04-09 17:01:11 +08:00
回复了 FreeEx 创建的主题 程序员 数据库存储的敏感信息是否需要加密存储?
分两部分看:
密码一般不可逆,我们也没有必要逆向出密码的明文,因此属于哈希类的,只需要通过相同的哈希算法得出一致的结果就行,不关心它的明文到底是什么。

但是手机号等这类信息是需要可逆的,也就是加密之后还得解密,落地存储到数据库的时候到底要不要对此类信息进行加密,我记得三级等保是需要的,但是加密的一个后果就是无法支持区间条件查询,比如一个需求是查询所有以 188 开头手机号的所有记录,加密以后就无法进行范围匹配查询了,当然了,也可以有其他的辅助性的索引支撑,但是复杂性也会随之提高。

我又要唠叨一下了,没有绝对的安全,只能尽量保证在泄露数据之后,使泄露出去的那一部分无法单独得出有意义的结果,比如只是数据库被脱库了,但是没有应用代码的逻辑,即使拿到那一部分数据也是没有意义的。当然了,如果你的应用代码和数据库全被扒了,那么再好的加密措施也会变得没有意义,就看对方是否愿意花时间在这上面研究了。
2021-04-09 15:53:59 +08:00
回复了 dengji85 创建的主题 Java 各位 30cm, 问一下 所谓的 service 层中怎么优雅获取当前用户
在同步编程模型下直接通过本地线程变量获取绑定的信息,相当于在这个线程上下文中设定了全局变量。

使用同步编程模型,如果在 service 里面获取当前的信息,就跟使用 service 的环境耦合了(本地线程变量),service 不是无状态的。

当然如果一直使用这种同步编程模型是没什么问题的,但如果想要在异步环境下不改变代码也可以使用 service 的话,就必须要在执行阶段先进行类似环境绑定的操作。

比如在执行前,将之前的全局变量绑定到当前的线程,执行完以后再清除避免下一个执行任务获取到错误的信息。
2021-04-07 15:50:35 +08:00
回复了 yumc 创建的主题 Java Java 数据对象的 toString()重写为 Json 格式的优劣
@zhilincom 硬编码拼接除非字符串这些是固定可预期的值,否则会出现像 SQL 注入的那样,破坏了 JSON 的结构。另外,反过来想,与其调用 toString 返回 JSON 字符串,为什么不直接把对象传给 JSON 序列化器呢?

例如:JSON.stringify(obj)
1 ... 10  11  12  13  14  15  16  17  18  19  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   920 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 30ms · UTC 19:43 · PVG 03:43 · LAX 11:43 · JFK 14:43
Developed with CodeLauncher
♥ Do have faith in what you're doing.