您当前的位置:首页 > 互联网百科 > 大数据

金融用户敏感数据如何优雅地实现脱敏?

时间:2023-05-31 13:02:06  来源:今日头条  作者:老马啸西风

项目介绍

日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。

sensitive[1] 提供了基于注解的方式,并且内置了常见的脱敏方式,便于开发。

日志脱敏

为了金融交易的安全性,国家强制规定对于以下信息是要日志脱敏的:

1.用户名2.手机号3.邮箱4.银行卡号5.密码6.身份证号

特性

1.基于注解的日志脱敏。2.可以自定义策略实现,策略生效条件。3.内置常见的十几种脱敏内置方案。4.JAVA 深拷贝,且原始对象不用实现任何接口。5.支持用户自定义注解。6.支持基于 FastJSON 直接生成脱敏后的 json

 

快速开始

环境准备

JDK 7+

Maven 3.x

maven 导入

<dependency>
    <groupId>com.Github.houbb</groupId>
    <artifactId>sensitive-core</artifactId>
    <version>1.0.0</version>
</dependency>

核心 api 简介

SensitiveUtil 工具类的核心方法列表如下:

序号

方法

参数

结果

说明

1

desCopy()

目标对象

深度拷贝脱敏对象

适应性更强

2

desJson()

目标对象

脱敏对象 json

性能较好

3

desCopyCollection()

目标对象集合

深度拷贝脱敏对象集合

 

4

desJsonCollection()

目标对象集合

脱敏对象 json 集合

 

定义对象

•UserAnnotationBean.java

通过注解,指定每一个字段的脱敏策略。

public class UserAnnotationBean {


    @SensitiveStrategyChineseName
    private String username;


    @SensitiveStrategyPassword
    private String password;


    @SensitiveStrategyPassport
    private String passport;


    @SensitiveStrategyIdNo
    private String idNo;


    @SensitiveStrategyCardId
    private String bandCardId;


    @SensitiveStrategyPhone
    private String phone;


    @SensitiveStrategyEmAIl
    private String email;


    @SensitiveStrategyAddress
    private String address;


    @SensitiveStrategyBirthday
    private String birthday;


    @SensitiveStrategyGps
    private String gps;


    @SensitiveStrategyIp
    private String ip;


    @SensitiveStrategyMaskAll
    private String maskAll;


    @SensitiveStrategyMaskHalf
    private String maskHalf;


    @SensitiveStrategyMaskRange
    private String maskRange;


    //Getter & Setter
    //toString()
}

•数据准备

构建一个最简单的测试对象:

UserAnnotationBean bean  = new UserAnnotationBean();
bean.setUsername("张三");
bean.setPassword("123456");
bean.setPassport("CN1234567");
bean.setPhone("13066668888");
bean.setAddress("中国上海市浦东新区外滩18号");
bean.setEmail("whatanice@code.com");
bean.setBirthday("20220831");
bean.setGps("66.888888");
bean.setIp("127.0.0.1");
bean.setMaskAll("可恶啊我会被全部掩盖");
bean.setMaskHalf("还好我只会被掩盖一半");
bean.setMaskRange("我比较灵活指定掩盖范围");
bean.setBandCardId("666123456789066");
bean.setIdNo("360123202306018888");

•测试代码

final String originalStr = "UserAnnotationBean{username='张三', password='123456', passport='CN1234567', idNo='360123202306018888', bandCardId='666123456789066', phone='13066668888', email='whatanice@code.com', address='中国上海市浦东新区外滩18号', birthday='20220831', gps='66.888888', ip='127.0.0.1', maskAll='可恶啊我会被全部掩盖', maskHalf='还好我只会被掩盖一半', maskRange='我比较灵活指定掩盖范围'}";
final String sensitiveStr = "UserAnnotationBean{username='张*', password='null', passport='CN*****67', idNo='3****************8', bandCardId='666123*******66', phone='1306****888', email='wh************.com', address='中国上海********8号', birthday='20*****1', gps='66*****88', ip='127***0.1', maskAll='**********', maskHalf='还好我只会*****', maskRange='我*********围'}";
final String expectSensitiveJson = "{"address":"中国上海********8号","bandCardId":"666123*******66","birthday":"20*****1","email":"wh************.com","gps":"66*****88","idNo":"3****************8","ip":"127***0.1","maskAll":"**********","maskHalf":"还好我只会*****","maskRange":"我*********围","passport":"CN*****67","phone":"1306****888","username":"张*"}";


UserAnnotationBean sensitiveUser = SensitiveUtil.desCopy(bean);
Assert.assertEquals(sensitiveStr, sensitiveUser.toString());
Assert.assertEquals(originalStr, bean.toString());


String sensitiveJson = SensitiveUtil.desJson(bean);
Assert.assertEquals(expectSensitiveJson, sensitiveJson);

我们可以直接利用 sensitiveUser 去打印日志信息,而这个对象对于代码其他流程不影响,我们依然可以使用原来的 user 对象。

当然,也可以使用 sensitiveJson 打印日志信息。

@Sensitive 注解

说明

@SensitiveStrategyChineseName 这种注解是为了便于用户使用,本质上等价于 @Sensitive(strategy = StrategyChineseName.class)。

@Sensitive 注解可以指定对应的脱敏策略。

内置注解与映射

编号

注解

等价 @Sensitive

备注

1

@SensitiveStrategyChineseName

@Sensitive(strategy = StrategyChineseName.class)

中文名称脱敏

2

@SensitiveStrategyPassword

@Sensitive(strategy = StrategyPassword.class)

密码脱敏

3

@SensitiveStrategyEmail

@Sensitive(strategy = StrategyEmail.class)

email 脱敏

4

@SensitiveStrategyCardId

@Sensitive(strategy = StrategyCardId.class)

卡号脱敏

5

@SensitiveStrategyPhone

@Sensitive(strategy = StrategyPhone.class)

手机号脱敏

6

@SensitiveStrategyIdNo

@Sensitive(strategy = StrategyIdNo.class)

身份证脱敏

6

@SensitiveStrategyAddress

@Sensitive(strategy = StrategyAddress.class)

地址脱敏

7

@SensitiveStrategyGps

@Sensitive(strategy = StrategyGps.class)

GPS 脱敏

8

@SensitiveStrategyIp

@Sensitive(strategy = StrategyIp.class)

IP 脱敏

9

@SensitiveStrategyBirthday

@Sensitive(strategy = StrategyBirthday.class)

生日脱敏

10

@SensitiveStrategyPassport

@Sensitive(strategy = StrategyPassport.class)

护照脱敏

11

@SensitiveStrategyMaskAll

@Sensitive(strategy = StrategyMaskAll.class)

全部脱敏

12

@SensitiveStrategyMaskHalf

@Sensitive(strategy = StrategyMaskHalf.class)

一半脱敏

13

@SensitiveStrategyMaskRange

@Sensitive(strategy = StrategyMaskRange.class)

指定范围脱敏

@Sensitive 定义

@Inherited
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Sensitive {


    /**
     * 注解生效的条件
     * @return 条件对应的实现类
     */
    Class<? extends ICondition> condition() default ConditionAlwaysTrue.class;


    /**
     * 执行的策略
     * @return 策略对应的类型
     */
    Class<? extends IStrategy> strategy();


}

与 @Sensitive 混合使用

如果你将新增的注解 @SensitiveStrategyChineseName 与 @Sensitive 同时在一个字段上使用。

为了简化逻辑,优先选择执行 @Sensitive,如果 @Sensitive 执行脱敏, 那么 @SensitiveStrategyChineseName 将不会生效。

如:

/**
 * 测试字段
 * 1.当多种注解混合的时候,为了简化逻辑,优先选择 @Sensitive 注解。
 */
@SensitiveStrategyChineseName
@Sensitive(strategy = StrategyPassword.class)
private String testField;

更多特性

自定义脱敏策略生效的场景

默认情况下,我们指定的场景都是生效的。

但是你可能需要有些情况下不进行脱敏,比如有些用户密码为 123456,你觉得这种用户不脱敏也罢。

•UserPasswordCondition.java

@Sensitive(condition = ConditionFooPassword.class, strategy = StrategyPassword.class)
private String password;

其他保持不变,我们指定了一个 condition,实现如下:

•ConditionFooPassword.java

public class ConditionFooPassword implements ICondition {
    @Override
    public boolean valid(IContext context) {
        try {
            Field field = context.getCurrentField();
            final Object currentObj = context.getCurrentObject();
            final String password = (String) field.get(currentObj);
            return !password.equals("123456");
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }
}

也就是只有当密码不是 123456 时密码脱敏策略才会生效。

属性为集合或者对象

如果某个属性是单个集合或者对象,则需要使用注解 @SensitiveEntry。

•放在集合属性上,且属性为普通对象

会遍历每一个属性,执行上面的脱敏策略。

•放在对象属性上

会处理对象中各个字段上的脱敏注解信息。

•放在集合属性上,且属性为对象

遍历每一个对象,处理对象中各个字段上的脱敏注解信息。

放在集合属性上,且属性为普通对象

•UserEntryBaseType.java

作为演示,集合中为普通的字符串。

public class UserEntryBaseType {


    @SensitiveEntry
    @Sensitive(strategy = StrategyChineseName.class)
    private List<String> chineseNameList;


    @SensitiveEntry
    @Sensitive(strategy = StrategyChineseName.class)
    private String[] chineseNameArray;


    //Getter & Setter & toString()
}

放在对象属性上

例子如下:

public class UserEntryObject {


    @SensitiveEntry
    private User user;


    @SensitiveEntry
    private List<User> userList;


    @SensitiveEntry
    private User[] userArray;


    //...
}

自定义注解

•v0.0.4 新增功能。允许功能自定义条件注解和策略注解。•v0.0.11 新增功能。允许功能自定义级联脱敏注解。

案例1

自定义密码脱敏策略&自定义密码脱敏策略生效条件

•策略脱敏

/**
 * 自定义密码脱敏策略
 * @author binbin.hou
 * date 2019/1/17
 * @since 0.0.4
 */
@Inherited
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@SensitiveStrategy(CustomPasswordStrategy.class)
public @interface SensitiveCustomPasswordStrategy {
}

•脱敏生效条件

/**
 * 自定义密码脱敏策略生效条件
 * @author binbin.hou
 * date 2019/1/17
 * @since 0.0.4
 */
@Inherited
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@SensitiveCondition(ConditionFooPassword.class)
public @interface SensitiveCustomPasswordCondition{
}

•TIPS

@SensitiveStrategy 策略单独使用的时候,默认是生效的。

如果有 @SensitiveCondition 注解,则只有当条件满足时,才会执行脱敏策略。

@SensitiveCondition 只会对系统内置注解和自定义注解生效,因为 @Sensitive 有属于自己的策略生效条件。

•策略优先级

@Sensitive 优先生效,然后是系统内置注解,最后是用户自定义注解。

对应的实现

两个元注解 @SensitiveStrategy、@SensitiveCondition 分别指定了对应的实现。

•CustomPasswordStrategy.java

public class CustomPasswordStrategy implements IStrategy {


    @Override
    public Object des(Object original, IContext context) {
        return "**********************";
    }


}

•ConditionFooPassword.java

/**
 * 让这些 123456 的密码不进行脱敏
 * @author binbin.hou
 * date 2019/1/2
 * @since 0.0.1
 */
public class ConditionFooPassword implements ICondition {
    @Override
    public boolean valid(IContext context) {
        try {
            Field field = context.getCurrentField();
            final Object currentObj = context.getCurrentObject();
            final String name = (String) field.get(currentObj);
            return !name.equals("123456");
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }


}

定义测试对象

定义一个使用自定义注解的对象。

public class CustomPasswordModel {


    @SensitiveCustomPasswordCondition
    @SensitiveCustomPasswordStrategy
    private String password;


    @SensitiveCustomPasswordCondition
    @SensitiveStrategyPassword
    private String fooPassword;


    //其他方法
}

测试

/**
 * 自定义注解测试
 */
@Test
public void customAnnotationTest() {
    final String originalStr = "CustomPasswordModel{password='hello', fooPassword='123456'}";
    final String sensitiveStr = "CustomPasswordModel{password='**********************', fooPassword='123456'}";
    CustomPasswordModel model = buildCustomPasswordModel();
    Assert.assertEquals(originalStr, model.toString());


    CustomPasswordModel sensitive = SensitiveUtil.desCopy(model);
    Assert.assertEquals(sensitiveStr, sensitive.toString());
    Assert.assertEquals(originalStr, model.toString());
}

构建对象的方法如下:

/**
 * 构建自定义密码对象
 * @return 对象
 */
private CustomPasswordModel buildCustomPasswordModel(){
    CustomPasswordModel model = new CustomPasswordModel();
    model.setPassword("hello");
    model.setFooPassword("123456");
    return model;
}

案例2

•v0.0.11 新增功能。允许功能自定义级联脱敏注解。

自定义级联脱敏注解

•自定义级联脱敏注解

可以根据自己的业务需要,在自定义的注解上使用 @SensitiveEntry。

使用方式保持和 @SensitiveEntry 一样即可。

/**
 * 级联脱敏注解,如果对象中属性为另外一个对象(集合),则可以使用这个注解指定。
 * <p>
 * 1. 如果属性为 Iterable 的子类集合,则当做列表处理,遍历其中的对象
 * 2. 如果是普通对象,则处理对象中的脱敏信息
 * 3. 如果是普通字段/MAP,则不做处理
 * @since 0.0.11
 */
@Inherited
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@SensitiveEntry
public @interface SensitiveEntryCustom {
}

定义测试对象

定义一个使用自定义注解的对象。

public class CustomUserEntryObject {


    @SensitiveEntryCustom
    private User user;


    @SensitiveEntryCustom
    private List<User> userList;


    @SensitiveEntryCustom
    private User[] userArray;


    // 其他方法...
}

生成脱敏后的 JSON

说明

为了避免生成中间脱敏对象,v0.0.6 之后直接支持生成脱敏后的 JSON。

使用方法

新增工具类方法,可以直接返回脱敏后的 JSON。

生成的 JSON 是脱敏的,原对象属性值不受影响。

public static String desJson(Object object)

注解的使用方式

和 SensitiveUtil.desCopy() 完全一致。

使用示例代码

所有的测试案例中,都添加了对应的 desJson(Object) 测试代码,可以参考。

此处只展示最基本的使用。

final String originalStr = "SystemBuiltInAt{phone='18888888888', password='1234567', name='脱敏君', email='12345@qq.com', cardId='123456190001011234'}";
final String sensitiveJson = "{"cardId":"123456**********34","email":"12******.com","name":"脱**","phone":"1888****888"}";


SystemBuiltInAt systemBuiltInAt = DataPrepareTest.buildSystemBuiltInAt();
Assert.assertEquals(sensitiveJson, SensitiveUtil.desJson(systemBuiltInAt));
Assert.assertEquals(originalStr, systemBuiltInAt.toString());

注意

本次 JSON 脱敏基于 FastJSON[2]。

FastJSON 在序列化本身存在一定限制。当对象中有集合,集合中还是对象时,结果不尽如人意。

示例代码

本测试案例可见测试代码。

final String originalStr = "UserCollection{userList=[User{username='脱敏君', idCard='123456190001011234', password='1234567', email='12345@qq.com', phone='18888888888'}], userSet=[User{username='脱敏君', idCard='123456190001011234', password='1234567', email='12345@qq.com', phone='18888888888'}], userCollection=[User{username='脱敏君', idCard='123456190001011234', password='1234567', email='12345@qq.com', phone='18888888888'}], userMap={map=User{username='脱敏君', idCard='123456190001011234', password='1234567', email='12345@qq.com', phone='18888888888'}}}";
final String commonJson = "{"userArray":[{"email":"12345@qq.com","idCard":"123456190001011234","password":"1234567","phone":"18888888888","username":"脱敏君"}],"userCollection":[{"$ref":"$.userArray[0]"}],"userList":[{"$ref":"$.userArray[0]"}],"userMap":{"map":{"$ref":"$.userArray[0]"}},"userSet":[{"$ref":"$.userArray[0]"}]}";
final String sensitiveJson = "{"userArray":[{"email":"12******.com","idCard":"123456**********34","phone":"1888****888","username":"脱**"}],"userCollection":[{"$ref":"$.userArray[0]"}],"userList":[{"$ref":"$.userArray[0]"}],"userMap":{"map":{"$ref":"$.userArray[0]"}},"userSet":[{"$ref":"$.userArray[0]"}]}";


UserCollection userCollection = DataPrepareTest.buildUserCollection();


Assert.assertEquals(commonJson, JSON.toJSONString(userCollection));
Assert.assertEquals(sensitiveJson, SensitiveUtil.desJson(userCollection));
Assert.assertEquals(originalStr, userCollection.toString());

解决方案

如果有这种需求,建议使用原来的 desCopy(Object)。

脱敏引导类

为了配置的灵活性,引入了引导类。

核心 api 简介

SensitiveBs 引导类的核心方法列表如下:

序号

方法

参数

结果

说明

1

desCopy()

目标对象

深度拷贝脱敏对象

适应性更强

2

desJson()

目标对象

脱敏对象 json

性能较好

使用示例

使用方式和工具类一致,示意如下:

SensitiveBs.newInstance().desCopy(user);

配置深度拷贝实现

默认的使用 FastJson 进行对象的深度拷贝,等价于:

SensitiveBs.newInstance()
                .deepCopy(FastJsonDeepCopy.getInstance())
                .desJson(user);

参见 SensitiveBsTest.java[3]

deepCopy 用于指定深度复制的具体实现,支持用户自定义。

深度复制(DeepCopy)

说明

深度复制可以保证我们日志输出对象脱敏,同时不影响正常业务代码的使用。

可以实现深度复制的方式有很多种,默认基于 fastjson[4] 实现的。

为保证后续良性发展,v0.0.13 版本之后将深度复制接口抽离为单独的项目:

deep-copy[5]

内置策略

目前支持 6 种基于序列化实现的深度复制,便于用户替换使用。

每一种都可以单独使用,保证依赖更加轻量。

自定义

为满足不同场景的需求,深度复制策略支持用户自定义。

自定义深度复制[6]

开源地址

https://github.com/houbb/sensitive [7]

References

[1] sensitive: https://github.com/houbb/sensitive
[2] FastJSON: https://github.com/alibaba/fastjson
[3] SensitiveBsTest.java: https://github.com/houbb/sensitive/blob/master/sensitive-test/src/test/java/com/github/houbb/sensitive/test/bs/SensitiveBsTest.java
[4] fastjson: https://github.com/alibaba/fastjson
[5] deep-copy: https://github.com/houbb/deep-copy
[6] 自定义深度复制: https://github.com/houbb/deep-copy#%E8%87%AA%E5%AE%9A%E4%B9%89
[7] https://github.com/houbb/sensitive : https://github.com/houbb/sensitive



Tags:脱敏   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
API接口脱敏:如何安全地处理敏感数据?
环境:SpringBoot2.6.12API接口脱敏是一种保护敏感数据的重要方法。它涉及到在数据传输和存储过程中,将敏感数据替换为无意义或伪装的数据,以防止未经授权的访问和泄露。下面是...【详细内容】
2023-10-07  Search: 脱敏  点击:(317)  评论:(0)  加入收藏
Hutool:如何使用一行代码实现数据脱敏?
1. 什么是数据脱敏 1.1 数据脱敏的定义数据脱敏百度百科中是这样定义的:数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。这样就可以在开发...【详细内容】
2023-08-11  Search: 脱敏  点击:(51)  评论:(0)  加入收藏
基于 log4j2 插件实现统一日志脱敏,性能远超正则替换
前言金融用户敏感数据如何优雅地实现脱敏?日志脱敏之后,无法根据信息快速定位怎么办?经过了这两篇文章之后,我们对日志脱敏应该有了一定的理解。但是实际项目中,我们遇到的情况往...【详细内容】
2023-06-05  Search: 脱敏  点击:(137)  评论:(0)  加入收藏
日志脱敏之后,无法根据信息快速定位怎么办?
日志脱敏之殇小明同学在一家金融公司上班,为了满足安全监管要求,最近天天忙着做日志脱敏。无意间看到了一篇文章金融用户敏感数据如何优雅地实现脱敏? 感觉写的不错,用起来也很...【详细内容】
2023-06-01  Search: 脱敏  点击:(228)  评论:(0)  加入收藏
Spring Boot如何优雅实现数据加密存储、模糊匹配和脱敏
1.概述近来我们都在围绕着使用Spring Boot开发业务系统时如何保证数据安全性这个主题展开总结,当下大部分的B/S架构的系统也都是基于Spring Boot + SpringMVC三层架构开发的,...【详细内容】
2023-05-31  Search: 脱敏  点击:(418)  评论:(0)  加入收藏
金融用户敏感数据如何优雅地实现脱敏?
项目介绍日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。sensitive[1] 提供了基于注解的方式,并且内置了常见的脱敏方式,便于...【详细内容】
2023-05-31  Search: 脱敏  点击:(131)  评论:(0)  加入收藏
FlinkSQL 数据权限之数据脱敏解决方案
作者 | HamaWhite审校| 蔡芳芳在当今数字化时代,数据已经成为企业和组织中不可或缺的重要资产,包括个人信息、商业机密、财务数据等等。然而,随着数据泄露和安全问题的不断增加...【详细内容】
2023-05-25  Search: 脱敏  点击:(94)  评论:(0)  加入收藏
SpringBoot中实现处理API接口敏感数据的脱敏
环境:SpringBoot2.4.12概述项目中开发的API接口,可能有些接口返回的字段信息不能以明文的形式传输,这时候我们该如何进行处理呢?以下给出3中方式: 数据库层面处理 在SQL查询的时...【详细内容】
2022-12-09  Search: 脱敏  点击:(670)  评论:(0)  加入收藏
聊聊如何自定义数据脱敏
前言什么是数据脱敏数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护常用脱敏规则替换、重排、加密、截断、掩码良好的数据脱敏实施1、尽...【详细内容】
2021-12-28  Search: 脱敏  点击:(390)  评论:(0)  加入收藏
如何在前端项目中将敏感数据信息脱敏处理?
大家好!我是/小郑搞码事/的小郑今天和大家分享敏感数据信息在项目中如何脱敏。大家应该都知道在项目中对于一些敏感信息,如数据库登录信息,第三方服务申请下来的的zkname值,redi...【详细内容】
2020-11-26  Search: 脱敏  点击:(2946)  评论:(0)  加入收藏
▌简易百科推荐
大数据杀熟何时告别“人人喊打却无可奈何”?
2月7日郑州飞往珠海的航班,不同手机、不同账号搜索该航班显示出不同价格。图源网络有网友近日分享在某平台的购票经历,引发社会广泛关注&mdash;&mdash;用3个账号买同一航班同...【详细内容】
2024-01-30    中国青年网  Tags:大数据杀熟   点击:(32)  评论:(0)  加入收藏
简易百科:到底什么是大数据?
随着互联网的快速发展,大数据已经成为了当今社会最热门的话题之一。那么,到底什么是大数据呢?首先,我们需要明确大数据的定义。大数据是指数据量极大、类型繁多、处理难度高的数...【详细内容】
2024-01-30    简易百科  Tags:大数据   点击:(40)  评论:(0)  加入收藏
数据采集新篇章:AI与大模型的融合应用
开篇在AIGC(人工智能与通用计算)应用中,大型语言模型(LLM)占据着举足轻重的地位。这些模型,如GPT和BERT系列,通过处理和分析庞大的数据集,已经极大地推动了自然语言理解和生成的边界...【详细内容】
2024-01-17  崔皓  51CTO  Tags:数据采集   点击:(51)  评论:(0)  加入收藏
挑战 Spark 和 Flink?大数据技术栈的突围和战争
十年的轮回,正如大数据的发展一般,它既是一个轮回的结束,也是崭新的起点。大数据在过去的二十年中蓬勃发展,从无到有,崛起为最具爆炸性的技术领域之一,逐渐演变成为每个企业不可或...【详细内容】
2024-01-17  InfoQ    Tags:大数据   点击:(40)  评论:(0)  加入收藏
分布式存储系统在大数据处理中扮演着怎样的角色?
如果存储节点本身可以定制,则通常会让其支持部分计算能力,以利用数据的亲和性,将部分计算下推到相关的存储节点上。如果存储是云上的 S3 等对象存储,无法定制,则通常会将数据在计...【详细内容】
2023-12-19  木鸟杂记  微信公众号  Tags:大数据   点击:(48)  评论:(0)  加入收藏
大数据如何实时拯救生命:车联网的数据分析有助预防交通事故
译者 | 李睿审校 | 重楼车联网(IoV)是汽车行业与物联网相结合的产物。预计车联网数据规模将越来越大,尤其是当电动汽车成为汽车市场新的增长引擎。问题是:用户的数据平台准备...【详细内容】
2023-12-19    51CTO  Tags:大数据   点击:(41)  评论:(0)  加入收藏
利用生成对抗网络进行匿名化数据处理
在互联网时代,数据日益成为人们的生产资料。然而,在某些情况下,我们需要分享数据,但又需要保护个人隐私。这时,匿名化技术就显得尤为重要。本文将介绍利用生成对抗网络进行匿名化...【详细内容】
2023-12-18  技巧达人小影    Tags:数据处理   点击:(57)  评论:(0)  加入收藏
盘点那些常见的数据中心类型,你知道几个?
在数字化潮流的浪潮下,数据中心如同企业的神经系统,关系到业务的稳健运转。而在这个巨大的网络中,各种数据中心类型如雨后春笋般崭露头角。从企业级的个性至云数据中心的虚拟化...【详细内容】
2023-12-07  数据中心之家  微信公众号  Tags:数据中心   点击:(65)  评论:(0)  加入收藏
数据中心的七个关键特征
随着信息技术的不断演进,数据中心的可靠性、可扩展性、高效性、安全性、灵活性、管理性和可持续性成为业界探讨的焦点。下面让我们一同深入剖析这些关键特征,了解它们是如何影...【详细内容】
2023-12-06  数据中心之家  微信公众号  Tags:数据   点击:(63)  评论:(0)  加入收藏
什么是数据解析?将数据转化为更好的决策
什么是数据解析?数据解析是一门专注于从数据中获取洞察力的学科。它包含数据分析(data analysis)和管理的流程、工具和技术,包括数据的收集、组织和存储。数据解析的主要目的是...【详细内容】
2023-12-06  计算机世界    Tags:数据解析   点击:(62)  评论:(0)  加入收藏
站内最新
站内热门
站内头条