精华内容
下载资源
问答
  • 本文探讨了大数据冷热分离的诸多解决方案,包括冷热分离异构系统、冷热分离同构系统。

    前言

    对于一个软件系统,无论其业务逻辑复杂到何种程度,最终都将体现到一条(批)数据的CRUD操作上,即创建、查询、更新与删除。正如人类面临生死的轮回,数据亦是如此。一条数据从被创建出来开始,随着时间的逝去,其价值逐渐变小,最终被删除。尽管在有些场景下,我们对客户承诺其数据会被永久保存,但这也是相对而言的。

    数据的存在价值,在于其被使用的程度,即被查询或更新的频率。在不同的业务系统中,人们对处于不同时期的数据有着不同的使用需求。比如,在网络流量行为分析系统中,客户会对最近一个月公司发生的安全事件和网络访问情况感兴趣,而很少关注几个月前的数据;在电商订单系统中,用户会经常访问最近三个月的订单,而更久远的数据则几乎不会去看。针对这样一些业务场景,我们将数据按照时间划分为三个阶段:Hot、Warm、Cold。Hot和Cold的特性分别如下所示,而Warm处于二者之间,通常会被合并到Hot或Cold中,从而减少系统的复杂度,本文也不准备将其单独拿出来讨论。

    • Hot(热数据)
      • 被频繁查询或更新
      • 对访问的响应时间要求很高,通常在10毫秒以内
    • Cold(冷数据)
      • 不允许更新,偶尔被查询
      • 对访问的响应时间要求不高,通常在1~10秒内都可以接受

    区分冷热数据的根本目的,在于控制成本。为什么这么说?因为通常情况下,为了支持热数据的操作特性,需要有较好的硬件配置,比如高性能CPU、大内存、SSD硬盘等等。随着时间的推移,系统里会积累越来越多的历史数据,如果依然采用高配置机器来存放这些使用频率非常低的数据,势必会带来非常高的成本。当然,如果数据量很小或者不计成本,那完全不需要考虑冷热区分,采用一个单体系统就可以应对所有事情了,比如MySQL。

    目前比较常见的冷热分离方案是将冷热数据分离到两套不同的系统,这两套系统拥有不同的存储特性、访问方式等,从而在保证热数据访问性能的同时,将冷数据的成本降低下来。而随着冷热分离方案的普及,很多框架也开始考虑类似的事情,尝试在自己的体系下支持将数据进行冷热分离,避免两套系统带来的复杂性。我们姑且将这两种方案分别称为“冷热分离异构系统”和“冷热分离同构系统”,本文将分别介绍几个相关的具体案例。

    冷热分离异构系统

    相比单体系统而言,将冷热数据分离到两个系统中,必然会带来整体的复杂性,需要在性能、成本、复杂度等因素之间做的一个权衡。实践中,通常需要结合具体的业务,考虑下面几件事:

    • 冷热数据系统的选型
    • 确定冷热数据分割线
    • 如何进行数据的迁移
    • 如何应对跨系统的查询

    在系统选型上,对于热数据系统,需要重点考虑读写的性能问题,诸如MySQL、Elasticsearch等会成为首选;而对于冷数据系统,则需要重点关注低成本存储问题,通常会选择存储在HDFS或云对象存储(比如AWS S3)中,再选择一个相应的查询系统。冷热数据是按照时间推移来区分的,因此必然要敲定一个时间分割线,即多久以内的数据为热数据,这个值通常会结合业务与历史访问情况来综合考量。对于超过时间线的数据,会被迁移到冷数据中,迁移过程需要确保两点:不能对热数据系统产生性能影响、不能影响数据查询。数据分离后,不可避免的会出现某个查询在时间上跨到两个系统里面,需要进行查询结果的合并,对于统计类查询就可能会出现一定的误差,需要在业务层面有所妥协。

    这里介绍两个冷热分离的实践方案,供大家参考。

    网络行为数据分析系统

    业务背景是,我们有很多UTM产品部署在用户的网络边界,对进出的网络数据进行扫描,扫描结果会上传到服务端进行处理、存储,从而提供统计分析查询功能,用户通过产品管理界面可以查看最近6个月的网络行为分析数据、定制日/周/月报表。

    在该系统中,我们需要为所有用户保留6个月的数据,而根据我们的统计分析,90%以上的请求访问的是最近1个月的数据,因此采用热数据系统保留35天数据,其他的迁移到冷数据系统中存储。为了配合数据挖掘相关功能,目前冷数据保留2年。该系统的数据是只读的,且对外主要提供统计类查询,因此热数据采用Elasticsearch来存储,利用其聚合分析能力提供高性能查询。冷数据以Parquet的格式保存在AWS S3上,通过AWS Athena实现查询。AWS Athena是一款基于Presto的托管数据查询系统,根据查询时所扫描的数据量来收费,不查询不收费,采用该系统可以充分利用云服务的优势,避免自己维护一套冷数据查询系统。

    数据实时上传到服务端后,会进入数据流中,通过Spark Streaming程序处理后写入到Elasticsearch,提供近实时数据查询。与此同时,实时数据也会备份到AWS S3。每天夜里,会启动一个Spark程序,加载前一天的备份数据进行处理并写入AWS S3,作为冷数据存储。该系统中,Elasticsearch中的Index按天分割,每天冷数据生成后会将冷热分割线往前推移,并删除热数据中对应的Index。

    电商交易订单系统

    业务背景是,用户在系统下单后会生成相应的交易订单信息,每天会产生大量的订单数据。这些数据需要永久保存,随时面对用户的低延迟查询,通常近3个月的订单是用户查询的主要对象。

    在该系统中,热数据毫无疑问会采用MySQL(InnoDB)来实现,满足事务操作和高效查询的需求。当然,在查询系统前面还会有一层缓存,这里略过。冷数据以宽表的形式存储到HBase中,并采用Elasticsearch来提供相关的索引查询,配合HBase的数据查询。热数据在MySQL中保留90天,之后迁移到HBase中作为冷数据永久保存。

    对于一个交易请求,会先在MySQL的订单表中创建订单记录,这些操作会通过BinLog同步到Kafka中,由Spark Streaming程序从Kafka中将相关订单信息变动提取出来,做相应的关联处理后写入到HBase中,同时更新Elasticsearch中的索引信息。每天定期将冷热分割线往前推移,并删除热数据中对应时间的订单表。

    冷热分离同构系统

    正如前文所述,冷热分离异构系统会带来整体的复杂性,主要表现在:需要维护两套系统,在业务逻辑中需要显式知道从哪里查询数据,甚至查询语法都不一样。很多开源框架在看到这一痛点后,开始在自己的体系下引入冷热分离的特性,试图以透明、统一的方式来应对冷热分离的需求。这里以Elasticsearch为例,来探讨下业界在冷热分离同构系统的诸多方案。

    从Elasticsearch 5.0开始,便支持在一个集群中存放冷热数据,其核心思路是:在集群中放入不同配置的机器,将其打上不同的属性,比如下图中的Node 1/2/3便是高配置机器,用于存放热数据,属性为Hot,Node 4/5是低配置机器,用于存放冷数据,属性为Cold;当创建一个新的Index时,指定其数据分配到Hot属性的机器上;一段时间后,再将其配置修改为分配到Cold属性机器上,Elasticsearch便会自动完成数据迁移。

    Elasticsearch 6.6之后,X-Pack中引入了Index Lifecycle Management机制,进一步简化了上述操作,我们不再需要自己定期去发送API做数据迁移了,只需要在Policy中设定Hot、Cold的生命周期即可,Elasticsearch会自动完成一切。

    除了Elasticsearch官方作出的努力,各大云厂商也在积极往这方面发展。众所周知,随着云计算的发展,未来最便宜的数据存储方式是存储到云对象存储中,比如AWS S3。AWS在re:Invent 2019中发布了针对其Elasticsearch Service的UltraWarm机制,便是在推出冷热分离的解决方案。其基本思想跟上述相似,只是作为云服务,不再需要配置相应的机器属性,而是在创建集群时选择相应的UltraWarm机器,这类机器的数据存储在S3中。由业务自己决定何时需要将哪些Index转为冷数据,通过API发送相关请求到Elasticsearch即可。

    结束语

    本文探讨了大数据冷热分离的诸多解决方案,随着云计算的发展,应该会有越来越多的系统走向“冷热分离同构系统”的方案,从而简化整体的复杂性,在业务层表现为统一的访问方式。但是,异构系统中的冷数据系统还是会以另一种形式存在,毕竟我们需要将更多的历史数据沉淀到HDFS/S3这样的廉价存储系统中,为数据分析与挖掘提供弹药。



    (全文完,本文地址:https://bruce.blog.csdn.net/article/details/106291463

    版权声明:本人拒绝不规范转载,所有转载需征得本人同意,并且不得更改文字与图片内容。大家相互尊重,谢谢!

    Bruce
    2020/06/14 下午

    展开全文
  • 前端的表现与数据分离(一)

    千次阅读 2017-08-23 23:04:54
    第一次看到表现与数据分离,我就觉得是个很高大上的东西,然后通过万能的度娘,总算是了解了一些,在这里稍微说一下我自己的理解。 “分离”的话可以分为两种: 第一种是前端与后台分离,所有数据都是通过请求...

    第一次看到表现与数据分离,我就觉得是个很高大上的东西,然后通过万能的度娘,总算是了解了一些,在这里稍微说一下我自己的理解。

    “分离”的话可以分为两种:

    第一种是前端与后台分离,所有数据都是通过请求(AJAX)从后台获取,前端处理数据展现页面,不需要后台在页面中插入变量。

    第二种前端展现与数据分离。也就是说在前端处理数据的过程中,处理DOM的代码与处理数据的代码要区分开,不能混在一起,这样改起来不会牵连太多,泾渭分明

    第一种没什么好说,将数据写死在页面的,基本很少见了

    第二种就不得不提一下两个大家可能比较熟悉的东西,MVC、MVVM

    model view controller

    model 数据模型负责业务逻辑和数据存储,在接收到controller传递过来的事件后进行数据处理,并通知view进行同步更新

    view 视图绑定用户操作的事件,并在触发时将事件传递给controller,另外在接到同步更新通知后,对页面呈现的内容进行更新

    controller 控制器将用户操作映射到model上

    这么说可能并不是很清楚(反正我也只是为了自己看得懂   凸(艹皿艹 ))

    上代码吧,非本人代码,不过读书人的事  →_→

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="jquery-1.11.3.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                //定义一个controller
                var piliController = {
                    //选择视图
                    start: function () {
                        this.view.start();
                    },
                    //将用户操作映射到模型更新上
                    set: function (name) {
                        this.model.setPerson(name);
                    }
                };
                piliController.model = {
                    piliKV: {
                        '叶小钗': '刀狂剑痴',
                        '一页书': '百世经纶',
                        '素还真': '清香白莲'
                    },
                    curPerson: null,
                    //数据模型负责业务逻辑和数据存储
                    setPerson: function (name) {
                        this.curPerson = this.piliKV[name] ? name : null;
                        this.onchange();
                    },
                    //通知数据同步更新
                    onchange: function () {
                        piliController.view.update();
                    },
                    //相应视图对当前状态的查询
                    getPiliAction: function () {
                        return this.curPerson ? this.piliKV[this.curPerson] + this.curPerson : '???';
                    }
                };
                piliController.view = {
                    //用户触发change事件
                    start: function () {
                        $('#pili').change(this.onchange);
                    },
                    onchange: function () {
                        piliController.set($('#pili').val());
                    },
                    update: function () {
                        $('#end').html(piliController.model.getPiliAction());
                        console.log($('#pili').val());
                    }
                };
                piliController.start();
            });
        </script>
    </head>
    <body>
        <select id="pili">
         <option value="叶小钗">叶小钗</option>
            <option value="一页书">一页书</option>
            <option value="素还真">素还真</option>
        </select>
        <div id="end"></div>
    </body>
    </html>

    上面的代码,其实只是一个小功能,可能使用mvc反而显得繁琐,但是在项目很大,代码很长,数据很多的情况下,dom与数据处理混合在一起的时候,代码的维护就成了一个很麻烦的事

    展开全文
  • 我开发的是安卓手机APP 界面用的是html 数据是通过ajax从后台获取的 然后后台返回json数据给前端 问题就在这 前端怎么返回的json数据显示到html中 因为我了解到html中不能使用JSTL和EL表达式.......我唯一想到的...
  • 参数化测试允许传递多组数据,一旦发现测试失败,pytest会及时报告。 @pytest.mark.parametrize(argnames,argvalues)装饰器可以达到批量传送参数的目的 第一步:用python的requests请求一个接口: import ...

    pytest参数化测试!

    参数化测试允许传递多组数据,一旦发现测试失败,pytest会及时报告。

    @pytest.mark.parametrize(argnames,argvalues)装饰器可以达到批量传送参数的目的

    第一步:用python的requests请求一个接口:

    import requests
    import pytest
    import allure
    
    
    class TestParam1(object):
        """
        """
    
        @pytest.fixture(scope="class", autouse=True)
        def prepare(self, request):
            with allure.step("测试数据准备:"):
                pass
    
            @allure.step("测试数据数据清理:")
            def fin():
                """
                Clean up test environment after testing
                """
                pass
    
            request.addfinalizer(fin)
    
        def test_param_1(self):
            url = "http://127.0.0.1:8000/add_message/"
            headers = {
                'Content-Type': "application/x-www-form-urlencoded",
            }
            payload ={
                "mid" :"106",
                "name" :"android4",
    "content" : "8" ,
                "status": "1",
                "author" :"xixi"
            }
            response = requests.request("POST", url, data=payload, headers=headers)
            print(response.json())
            assert response.json()["message"] == "add message success"
    

    第二步:使用装饰器

    #!/usr/bin/python
    # coding=utf-8
    
    
    import pytest
    import requests
    
    from utils.get_data import get_data_path
    from utils.get_data import get_test_data
    
    param=[
        ({'Content-Type': 'application/x-www-form-urlencoded'}, {'name': 'android11', 'content': '8', 'status': '1', 'author': 'xixi', 'mid': '110'}),
        ({'Content-Type': 'application/x-www-form-urlencoded'}, {'name': 'android12', 'content': '8', 'status': '1', 'author': 'xixi', 'mid': '111'}),
        ({'Content-Type': 'application/x-www-form-urlencoded'}, {'name': 'android13', 'content': 'hahah', 'status': '1', 'author': 'xixi', 'mid': '112'})
    ]
    
    
    class TestParam2(object):
        """
        """
    
        @pytest.fixture(scope="class", autouse=True)
        def prepare(self, request):
            pass
    
            def fin():
     """
                Clean up test environment after testing
                """
                pass
    
            request.addfinalizer(fin)
    
        @pytest.mark.parametrize("headers,payload", param)
        def test_param_2(self,headers,payload):
            url = "http://127.0.0.1:8000/add_message/"
            response = requests.request("POST", url, data=payload, headers=headers)
            res = response.json()
            #assert res["message"] == "add message success"

    第三步:编写获取测试data的函数

    def get_data_path(case_path):
        file_name = os.path.dirname(case_path).split(os.sep + 'tests' + os.sep, 1)
        test_data = os.sep.join([file_name[0], 'data', file_name[1], os.path.basename(case_path).replace('.py', '.json')])
        return test_data
    
    def get_test_data(test_data_path):
        case = []
        headers = []
        querystring = []
        payload = []
        expected = []
        with open(test_data_path,encoding='utf-8') as f:
            dat = json.loads(f.read())
            test = dat['test']
            for td in test:
                case.append(td['case'])
                headers.append(td.get('headers', {}))
                querystring.append(td.get('querystring', {}))
                payload.append(td.get('payload', {}))
                expected.append(td.get('expected', {}))
        list_parameters = list(zip(case, headers, querystring, payload, expected))
        return case, list_parameters

     

    第四步:将测试data与case相分离

    #!/usr/bin/python
    # coding=utf-8
    
    
    import pytest
    import requests
    
    from utils.get_data import get_data_path
    from utils.get_data import get_test_data
    
    case,param = get_test_data(get_data_path(__file__))
    
    class TestParam2(object):
        """
        """
    
        @pytest.fixture(scope="class", autouse=True)
        def prepare(self, request):
            pass
    
            def fin():
                """
                Clean up test environment after testing
                """
                pass
    
            request.addfinalizer(fin)
    
        @pytest.mark.parametrize("case,headers,querystring,payload,expected", param,ids=case)
        def test_param_2(self,case,headers,querystring,payload,expected):
            url = "http://127.0.0.1:8000/add_message/"
    response = requests.request("POST", url, data=payload, headers=headers)
            res = response.json()
            assert res["message"] == "add message success"
    

    第五部:test 大功告成~!

    展开全文
  • 前端架构之表现与数据分离

    千次阅读 2017-02-02 22:02:51
    表现与数据分离

    今天凑巧有个朋友突然问我:表现跟数据分离什么东东呀?
    其实这个再许多公司招聘的要求上都会写对于表现跟数据分离的理解程度,其实我感觉用的框架多了,积累的经验多了,自然而然的就会形成了自己的一套思维模板,一套最简便的可以多样化的模板,今天乘着这个机会我把自己的理解表达一下,不一定正确,只是自己的感悟!
    表现:顾名思义,就是表达出来的现象,在前端来看,就是html+css,就是平常所看到的的网页的架子呗;
    数据:一般是从后端数据库或从哪爬过来的数据,然后在前台显示出来,即是网页中各个结构上的内容;
    在前端架构语言中,我用过的只有angularJs实现了将数据放到js中,然后html中直接将数据内容映射到框架中。其实这应该就是将表现和数据完全分离出来的一种框架,这种结构的好处就是更改后端数据时,不需要再动这些结构了;
    而这种概念出现最早还是在mvc的概念中,model-view-controller,即把数据、表现与控制分离开,不管是对于开发还是后期维护以为阅读代码都有很好的清晰和简洁性,在后端中用的最多,近几年在前端代码中也越来越引入各种架构,不想原来前端JS混乱了,各种js乱七八糟的写;
    这也是angularJs现在在前端越来越推广大的根本原因;

    展开全文
  • 关于redis的冷热数据分离

    万次阅读 2017-01-24 16:02:14
    对于以持久化为主的模式,因其天然支持大容量数据的快速读写,实现冷热数据分离是相对比较容易的,当前用到的数据就认为是热数据,只要热数据保留于指定大小的内存即可。而对于以内存为主的模式,即使有持久化,也...
  • (二)数据控制分离

    千次阅读 2017-09-10 16:57:10
    1.数据控制分离 数据控制分离是SDN的主要特征之一,如下图所示 从功能角度来说,控制平面主要是建立本地的数据集合,即路由信息库(RIB)。控制平面是基于RIB创建转发表(也称转发信息库(FIB)),用于指导设备...
  • 这次数据库的冷热分离算是第二次做了 其实之前已经做过一次冷热分离了,涉及到数据库复制时,当时是趋近于业务的(后面会详细讲),整体来讲不是很好用,这次算是重构了吧 做的最终结果还是和前一次一样: 数据库中的订单...
  • 作者:从墨 随着企业的不断发展,企业产生大量的数据...在2019年HC大会上,华为重磅推出最新一代高扩展海量存储分布式数据库——TaurusDB,它拥有一个最大的特点就是将存储和计算以一种分离的架构形式运行。很多人...
  • python接口自动化----数据分离(一)

    千次阅读 2019-06-24 10:02:55
    在讲述步骤是会每个文件夹里方法的什么东西 说一下 首先在data目录下创建一个后缀名为xls的Excel文件(文件名:data.xls) 在文件里依次写入测试数据 测试编号 测试标题 测试的URL 测试参数 预期结果 实际...
  • 数据与业务逻辑分离

    千次阅读 2018-03-22 11:23:31
    它能够在内存对象和数据库中传递数据并保持他们彼此独立,以分离领域与数据源。 活动记录集可以使用在不分业务逻辑层和数据访问层的情况。 最理想的情况下是使用数据映射器模式,使用ORM层,业务逻辑层只出力...
  • 冷热数据分离注意的问题

    千次阅读 2016-10-13 15:39:10
    web产品最重要的核心单元无疑是数据,而主流的存储容器则是Mysql,对于快速增长的数据,其性能可能会呈指数级的递减,为解决该问题,主流的做法基本是水平和垂直拆分,根据数据的特性将数据进行库和表级的拆分,实际上的...
  • SDN-数据控制分离

    千次阅读 2019-06-15 13:13:04
    SDN-数据控制分离 数据平面: 1)数据平面的首要工作是通过一系列链路级操作采集传入的数据分组,并执行基本的完整性检查。 2)接下来,数据平面将查找FIB表(FIB表已通过控制平面生成,并通过镜像复制到数据平面)...
  • 为什么将指令cache与数据cache分离

    千次阅读 2020-11-23 18:01:06
    为什么将 指令cache 和 数据cache 相分离? 主要是为了避免资源冲突,在五级指令流水线中,分为IF(取址),ID(译码),EXE(执行),MEM(访存),WB(写回)。当然也不一定是五级,现在处理器流水线的长度都在15级左右。...
  • 数据库读写分离主要解决高并发...这就是读写分离数据库数据不一致的根本原因。 下面给出两种方案去解决这个问题: 缓存标记法 上图流程: 1)A发起写请求,更新了主库,再在缓存中设置一个标记,代表此数据已经更新,
  • 语音分离speech separation数据准备,开源

    千次阅读 热门讨论 2020-06-22 16:31:57
    Speech separation 现在大热的一个方向,西雅图的腾讯一直在作者...但会发现很多论文或者网上有的开源的代码都需要WSJ0数据来做, 这个数据集是要钱的,很贵,所以我自 己做了一个separation数据准备的脚本,并且开源.
  • MyBatis多数据源配置(读写分离)

    万次阅读 多人点赞 2015-07-09 13:45:39
    MyBatis多数据源配置(读写分离)首先说明,本文的配置使用的最直接的方式,实际用起来可能会很麻烦。实际应用中可能存在多种结合的情况,你可以理解本文的含义,不要死板的使用。多数据源的可能情况1.主从通常是MySql...
  • 为什么将指令cache和数据cache相分离

    千次阅读 多人点赞 2018-12-08 18:16:06
    为什么将指令cache和数据cache相分离? 主要是为了避免资源冲突,在五级指令流水线中,分为IF(取址),ID(译码),EXE(执行),MEM(访存),WB(写回)。当然也不一定是五级,现在处理器流水线的长度都在15级左右。但是IF...
  • 项目量产过程中需要验证麦克风的好坏,需要通过麦克风录音,查看录音数据确定麦克风的好坏,但实际过程中产品有4个麦克风,录音回来的数据需要做数据分离,然后才能确定到底哪个麦克风出现问题。 这个问题已经在...
  • RobotFramework 数据分离

    千次阅读 2015-07-24 16:51:46
    RobotFramework 数据分离分为三种 1. Run 添加参数 2. 外部的Python文件 3. 读取Excel Run 添加参数 (适用于jenkins) 使用-v 参数名:参数值 使用外部的Python文件 使用外部的python...
  • 前后端分离——前后端数据交互

    万次阅读 2017-04-28 09:41:35
    在此介绍几种常用的前后端数据交互方法,并给出使用建议。以提高前后端协同开发的效率。 此文章适合前后端协同开发经验不足的新手阅读。 HTML赋值 输出到 Element 的 value 或 data-name input type=...
  • 最近在做前后端分离数据交互。在这里记录一下前后端分离的交互实现以及遇到的问题及解决方法。1.首先是解决与后台跨域通信的问题 可以参考我的上一篇博客利用工具跨域通信(发送请求数据)等2.保存用户输入的...
  • 摘要:如何快速通过云化,实现资源利用率提升,降本增效,打破传统系统建设的数据孤岛,成为企业快速发展的关键所在。 随着5G和AIoT技术的发展,数据量指数级增长,新的数据业务层出不穷。作为数字化时代的先行者 ...
  • 本人一位大三的学生,使用MFC做界面,为了提取串口来的数据,写了个简单的提取代码,希望对初学者有用。 工具版本:vs2013+mfc。 void CPORTMFCDlg::OnCommMscomm1() { m_strRXData = ""; m_strRXData2 = ""; ...
  • #结果转为list contents=list(obj_content) #返回 return JsonResponse({'code':1,'data':contents}) except Exception as e: #如果出现异常,返回 return JsonResponse({'code': 0, 'msg': "获取评论信息异常"+...
  • 这时就需要将应用和数据分离。应用和数据分离后整个网站使用三台服务器:应用服务器、文件服务器和数据库服务器,如图。    这三台服务器对硬件资源的要求各不相同: 应用服务器需要处理大量的业务逻辑,因此...
  • 比如数据库读写分离,读操作都去从库里读,写操作都往主库里写。那么这里主库和从库就是两个不同的数据源。再比如要做两个数据库之间的数据转换,从一个数据库读取数据写到另一个数据库中,等等这些情况都需要系统...
  • 一、取excel数据 首先来看一下怎么取到excel表中的数据 代码: import xlrd #先打开excel表 book = xlrd.open_workbook("../Data/data1.xlsx") #定位sheet表 table = book.sheet_by_name("Sheet1") #统计行 print...
  • 它有三个产品,分别是Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar,这三个产品提供了标准化的数据分片、读写分离、柔性事务和数据治理功能。我们这里用的是Sharding-JDBC,所以想了解后面两个产品的话可以去...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 736,983
精华内容 294,793
关键字:

怎么把数据分离出来

友情链接: cllivration-can.rar