前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用 System.Net.Http.Json 高效处理Json数据

使用 System.Net.Http.Json 高效处理Json数据

原创
作者头像
全球技术精选
修改于 2021-01-11 02:13:53
修改于 2021-01-11 02:13:53
2.2K00
代码可运行
举报
文章被收录于专栏:全球技术精选全球技术精选
运行总次数:0
代码可运行

在这篇文章,我将介绍一个名为 System.Net.Http.Json 的扩展库,它最近添加到了 .NET 中,我们看一下这个库能够给我们解决什么问题,今天会介绍下如何在代码中使用。

在此之前我们是如何处理

JSON是一种普遍和流行的串行化格式数据来发送现代web api,我经常在我的项目中使用HttpClient 调用外部资源, 当 content type 是 “application/json”, 我拿到Json的响应内容后,我需要手动处理响应,通常会验证响应状态代码是否为200,检查内容是不是为空,然后再试图从响应内容流反序列化

如果我们使用 Newtonsoft.Json, 代码可能是像下边这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static async Task<User> StreamWithNewtonsoftJson(string uri, HttpClient httpClient)
{
    using var httpResponse = await httpClient.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead);

    httpResponse.EnsureSuccessStatusCode(); // throws if not 200-299

    if (httpResponse.Content is object && httpResponse.Content.Headers.ContentType.MediaType  "application/json")
    {
        var contentStream = await httpResponse.Content.ReadAsStreamAsync();

        using var streamReader = new StreamReader(contentStream);
        using var jsonReader = new JsonTextReader(streamReader);

        JsonSerializer serializer = new JsonSerializer();

        try
        {
            return serializer.Deserialize<User>(jsonReader);
        }
        catch(JsonReaderException)
        {
            Console.WriteLine("Invalid JSON.");
        } 
    }
    else
    {
        Console.WriteLine("HTTP Response was invalid and cannot be deserialised.");
    }

    return null;
}

虽然上面没有大量的代码, 但是我们从外部服务接收JSON数据需要都编写这些,在微服务环境中,这可能是在很多地方,不同的服务。

大家可能通常也会把 Json 序列化成 String,在 HttpClient 的 HttpContent 中调用GetStringAsync ReadAsStringAsync,可以直接使用 Newtonsoft.Json 和 System.Text.Json,现在的一个问题是我们需要多分配一个包含整个Json 数据的 String,这样会存在浪费,因为我们看上面的代码已经有一个可用的响应流,可以直接反序列化到实体,通过使用流,也可以进一步提高性能,在我的另一篇文章里, 可以利用HttpCompletionOption来改善HttpClient性能。

如果您在过去在项目中使用过 HttpClient 来处理返回的Json数据,那么您可能已经使用了Microsoft.AspNet.WebApi.Client。我在过去使用过它,因为它提供了有用的扩展方法来支持从HttpResponseMessage上的内容流进行高效的JSON反序列化,这个库依赖于Newtonsoft.Json文件并使用其基于流的API来支持数据的高效反序列化,这是一个方便的库,我用了几年了

如果我们在项目中使用这个库,上面的代码可以减少一些

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static async Task<User> WebApiClient(string uri, HttpClient httpClient)
{
    using var httpResponse = await httpClient.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead);

    httpResponse.EnsureSuccessStatusCode(); // throws if not 200-299

    try
    {
        return await httpResponse.Content.ReadAsAsync<User>();
    }
    catch // Could be ArgumentNullException or UnsupportedMediaTypeException
    {
        Console.WriteLine("HTTP Response was invalid or could not be deserialised.");
    }

    return null;
}

最近.NET 团队引入了一个内置的JSON库 System.Text.Json,这个库是使用了最新的 .NET 的性能特性, 比如 Span, 低开销, 能够快速序列化和反序列化, 并且在.NET Core 3.0 集成到了 BCL(基础库), 所以你不需要引用一个额外的包在项目中

今天,我更倾向于使用 System.Text.Json,主要是在流处理,代码跟上面 Newtonsofe.Json 相比更简洁

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static async Task<User> StreamWithSystemTextJson(string uri, HttpClient httpClient)
{
    using var httpResponse = await httpClient.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead);

    httpResponse.EnsureSuccessStatusCode(); // throws if not 200-299

    if (httpResponse.Content is object && httpResponse.Content.Headers.ContentType.MediaType  "application/json")
    {
        var contentStream = await httpResponse.Content.ReadAsStreamAsync();

        try
        {
            return await System.Text.Json.JsonSerializer.DeserializeAsync<User>(contentStream, new System.Text.Json.JsonSerializerOptions { IgnoreNullValues = true, PropertyNameCaseInsensitive = true });
        }
        catch (JsonException) // Invalid JSON
        {
            Console.WriteLine("Invalid JSON.");
        }                
    }
    else
    {
        Console.WriteLine("HTTP Response was invalid and cannot be deserialised.");
    }

    return null;
}

因为我在项目中减少了第三方库的依赖,并且有更好的性能,我更喜欢用 System.Text.Json,虽然这块代码非常简单,但是还有更好的方案,从简洁代码的角度来看,到现在为止最好的选择是使用 Microsoft.AspNet.WebApi.Client 提供的扩展方法。

System.Net.Http.Json 介绍

我从今年2月份一直在关注这个库,以及首次在 github 显示的设计文档和问题,这些需求和建议的API都可以在设计文档中找到。

客户端从网络上对 JSon 内容序列化和反序列化是非常常见的操作,特别是即将到来的Blazor环境,现在,发送数据到服务端,需要写多行繁琐的代码,对使用者来说非常不方便,我们想对 HttpClient 扩展,允许做这些操作就像调用单个方法一样简单

你可以在github阅读完整的设计文档,团队希望构建一个更加方便的独立发布的库,来在 HttpClient 和 System.Text.Json 使用,也可以在Blazor 中使用这些API。

这些初始化的工作已经由微软的 David Cantu 合并到项目,准备接下来的 Blazor,现在已经是.NET 5 BCL(基础库)的一部分,所以这是我为什么一直在提 System.Net.Http.Json,现在你可以在 Nuget 下载安装,接下来,我会探讨下支持的主要的API和使用场景。

使用 HttpClient 发送和接收Json数据

下边的一些代码和示例我已经上传到了这里 https://github.com/stevejgordon/SystemNetHttpJsonSamples

这第一步是包添加到您的项目,你可以使用NuGet包管理器或者下边的命令行安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dotnet add package System.Net.Http.Json

使用 HttpClient 获取Json数据

让我们先看一个扩展方法HttpClient,这很简单

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static async Task<User> GetJsonHttpClient(string uri, HttpClient httpClient)
{
    try
    {
        return await httpClient.GetFromJsonAsync<User>(uri);
    }
    catch (HttpRequestException) // Non success
    {
        Console.WriteLine("An error occurred.");
    }
    catch (NotSupportedException) // When content type is not valid
    {
        Console.WriteLine("The content type is not supported.");
    }
    catch (JsonException) // Invalid JSON
    {
        Console.WriteLine("Invalid JSON.");
    }

    return null;
}

在代码第5行,传入泛型调用 GetFromJsonAsync 来反序列化 Json 内容,方法传入一个uri地址,这是我们所需要的,我们操作了一个 Http Get请求到服务端,然后获取响应反序列化到 User 实体,这很简洁,另外上边有详细的异常处理代码,在各种条件下来抛出异常

跟最上面的代码一样,使用 EnsureSuccessStatusCode 来判断状态码是否成功,如果状态码在 200-299 之外,会抛出异常

并且这个库还会检查是不是有效的媒体类型,比如 application/json, 如果媒体类型错误,将抛出 NotSupportedException,这里的检查比我上边手动处理的代码更加完整,如果媒体类型不是 application/json,则会对值进行基于Span的解析, 所以 application/<something>+json 也是有效的格式

这种格式是现在经常使用的,另外一个例子,可以发现这个库对于标准和细节的处理,RFC7159 标准 定义一种携带机器可读的HTTP响应中的错误,比如 application/problem+json, 我手写的代码没有处理和匹配这些,因为 System.Net.Http.Json 已经做了这些工作

在内部,ResponseHeadersRead HttpCompletionOption 用来提升效率,我最近的文章有这个的介绍,这个库已经处理好了 HttpResponseMessage,使用这个Option是必需的

转码

最后这个库的实现细节, 包括支持代码转换返回的数据,如果不是utf-8,utf-8应该在绝大多数情况下的标准,然而,如果 content-type 报头中包含的字符集标识不同的编码,将使用TranscodingStream 尝试反序列化成 utf-8

从HttpContent 处理Json

在某些情况下,您可能想要发送请求的自定义 Header , 或者你想反序列化之前检查 Response Header,这也可以使用 System.Net.Http.Json 提供的扩展方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static async Task<User> GetJsonFromContent(string uri, HttpClient httpClient)
{
    var request = new HttpRequestMessage(HttpMethod.Get, uri);
    request.Headers.TryAddWithoutValidation("some-header", "some-value");

    using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);

    if (response.IsSuccessStatusCode)
    {
        // perhaps check some headers before deserialising

        try
        {
            return await response.Content.ReadFromJsonAsync<User>();
        }
        catch (NotSupportedException) // When content type is not valid
        {
            Console.WriteLine("The content type is not supported.");
        }
        catch (JsonException) // Invalid JSON
        {
            Console.WriteLine("Invalid JSON.");
        }
    }

    return null;
}

发送Json数据

最后一个示例我们使用 HttpClient 来发送Json数据,看一下下边我们的两种实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static async Task PostJsonHttpClient(string uri, HttpClient httpClient)
{
    var postUser = new User { Name = "Steve Gordon" };

    var postResponse = await httpClient.PostAsJsonAsync(uri, postUser);

    postResponse.EnsureSuccessStatusCode();
}

第一个方法是使用 PostAsJsonAsync 扩展方法,把对象序列化成 Json 请求到服务端,内部会创建一个 HttpRequestMessage 和 序列化成内容流

还有一种情况需要手动创建一个 HttpRequestMessage, 也许包括自定义请求头,你可以直接创建 JsonContent

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static async Task PostJsonContent(string uri, HttpClient httpClient)
{
    var postUser = new User { Name = "Steve Gordon" };

    var postRequest = new HttpRequestMessage(HttpMethod.Post, uri)
    {
        Content = JsonContent.Create(postUser)
    };

    var postResponse = await httpClient.SendAsync(postRequest);

    postResponse.EnsureSuccessStatusCode();
}

在上边的代码中,我们创建了一个 JsonContent, 传入一个对象然后序列化,JsonContent 是 System.Net.Http.Json 库中的类型,内部它会使用 System.Text.Json 来进行序列化

总结

在这篇文章中,我们回顾了一些传统的方法,可以用来从HttpResponseMessage 来反序列化对象,我们看到,当手动调用api来解析JSON, 我们首先需要考虑比如响应状态是成功的, 并且是我们需要的媒体类型, Microsoft.AspNet.WebApi.Client 提供的 ReadAsAsync 方法,内部是使用 Newtonsoft.Json 来基于流的反序列化

我们的结论是使用新的 System.Net.Http.Json, 它会使用 System.Text.Json 来进行Json的序列化和反序列化,不依赖于第三方库 Newtonsoft.Json, 使用这个库提供的扩展方法,通过很简洁的代码就可以通过HttpClient 来发送和接收数据,并且有更好的性能表现,最后,你可以在这里找到本文的一些代码 https://github.com/stevejgordon/SystemNetHttpJsonSamples

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
腾讯私有云MySQL解决方案—TDSQL
TDSQL是腾讯提供的一套完整的MySQL数据库集群化管理解决方案,作为私有云TStack平台重要的数据库产品能力,旨在解决高可用、高性能、分布式、配套设施等方面问题。 TDSQL除了在腾讯内部有大量的使用场景,在外部市场中也有诸多应用场景;2014年被WeBank选中,作为其核心交易系统的数据库解决方案,以私有云方式交付;2015年,在腾讯云上正式推出。目前已经为500+机构提供数据库的公有云及专有云服务,客户覆盖计费、第三方支付、银行、保险、互联网金融、物联网、互联网+、政务等领域。 TDSQL私有云版
腾讯云TStack
2018/03/21
7.2K0
腾讯私有云MySQL解决方案—TDSQL
「TEG+系列」破局者 - 腾讯金融级数据库TDSQL
一 背景 金融行业的数据库市场,尤其是银行的核心交易系统,一直是Oracle、DB2这类传统商业数据库的天下,但是: 2014年,微众银行选用TDSQL作为其核心交易系统的数据库解决方案; 2015年,腾讯金融云正式推出TDSQL数据库解决方案,在公有云以及私有云上投入商用,覆盖包括银行、保险、互联网金融、物联网等多个行业领域。 这标志着TDSQL已经开始进入这个领域,虽然目前,金融、传统行业的核心数据库依然是Oracle、DB2们占主导,但是TDSQL对外开放仅两年,已经为40个金融政企机构提供数
TEG云端专业号
2018/03/13
1.6K0
「TEG+系列」破局者 - 腾讯金融级数据库TDSQL
TDSQL在微众银行的大规模实践之路
2014年:基于分布式的基础架构 微众银行在2014年成立之时,就非常有前瞻性的确立了微众银行的IT基础架构的方向:摒弃传统的基于商业IT产品的集中架构模式,走互联网模式的分布式架构。众所周知,传统银行IT架构体系非常依赖于传统的商业数据库,商业存储以及大中型服务器设备,每年也需要巨大的IT费用去维护和升级,同时这种集中式的架构,也不便于进行高效的实现水平扩展。从过往经验来看,当时除了oracle等少数传统的商业数据库,能满足金融级银行场景的数据库产品并不多。当时腾讯有一款金融级的分布式数据库产品TD
腾讯技术工程官方号
2019/08/20
1.5K0
TDSQL在微众银行的大规模实践之路
都说30而已,30后的技术人怎么走?
| 作者:杨壮壮 ,腾讯PCG运营开发工程师 ,目前主要从事 MDB(MySQL 云管平台)的后台开发与技术运营的工作,是一个做开发的DBA。熟悉腾讯自研数据库TDSQL的架构原理、集群管理维护、内核SQL优化等。MDB团队承载着整个PCG 关系型数据库的管理与运维工作,支撑着腾讯视频、看点等业务稳定运行。 1 Part1 前言 在今年的三月份,我们举办过一届数据库武林大会,在这场活动沙龙中,有辩手犀利地指出,数据库运维的薪资水平和数据库使用人数并不成正比,有数据表明一些小众但强大的数据库,其DBA的平均
腾讯云数据库 TencentDB
2020/08/19
7630
亿级客户和PB级数据规模的金融级数据库实战历程
点击▲关注 腾讯云数据库 | 导语 微众银行在2014年成立之时,就非常有前瞻性的确立了分布式架构的基础架构。当时,腾讯有一款金融级的分布式数据库产品TDSQL,其业务场景和对数据库的可靠性要求,和银行场景非常类似。微众银行和腾讯TDSQL团队合作,共同将TDSQL打造为适合银行核心场景使用的金融级分布式数据库产品,并将TDSQL用于微众银行的核心系统数据库。本文是对整个实践历程的总结。 一、背景介绍 微众银行在2014年成立之时,就非常有前瞻性的确立了微众银行的IT基础架构的方向:摒弃传统的基于商业IT
腾讯云数据库 TencentDB
2019/08/17
2.2K0
亿级客户和PB级数据规模的金融级数据库实战历程
腾讯云为金融换“心“
如果说核心系统是金融机构业务系统的“心脏”,那么数据库则是“心脏”的“心脏”,业务数据就像流淌在业务系统中的“血液”,拥有一颗健壮的“心脏”是系统高效处理业务和维持正常运转的必备条件。由于金融级数据库技术的高度复杂性,国内金融机构的核心系统长期依赖国外商用数据库产品,金融机构不但无法自主掌控核心系统的“心脏”,而且还需要长期投入高昂的软硬件成本,同时互联网业务的爆发性增长也导致“心脏”压力骤增,成本呈指数级增加。因此,如何实现金融级数据库的自主可控和降本增效,为核心系统平稳换“心”,成为金融行业关注的焦点
腾讯云数据库 TencentDB
2020/06/22
3.5K0
图说TDSQL | 下一个十年的金融业务场景,腾讯怎么做?
随着互联网的不断发展和逐渐普及,各行各业也纷纷选择了上云之路,腾讯云数据库致力于运用领先技术,助力企业上云,腾讯云自研的金融级分布式数据库TDSQL 是一款具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性的数据库产品,《图说TDSQL》栏目将以图文结合的形式,带大家了解TDSQL的方方面面。
腾讯云数据库 TencentDB
2020/03/19
9940
TDSQL在巴黎ICDE上设立展台,掌声送给它!
导读:TDSQL腾讯金融级分布式数据库,是由腾讯技术工程事业群计费平台部针对OLTP场景开发的高一致性数据库产品。ICDE,即International Conference on DataEngineering,由美国电气及电子工程师学会IEEE发起并组织,是与SIGMOD,VLDB并列的三大数据库领域的顶级会议之一。由腾讯技术工程事业群计费与高校关系的TDSQL在Salle des Textiles大厅设立的展台,吸引了包括图灵奖获得者Michael StoneBraker教授在内的行业人士驻足围观,获
腾讯技术工程官方号
2018/05/11
9340
腾讯成联合国全球合作伙伴,TDSQL如何支撑史上最大规模全球会议
受全球疫情影响,联合国75周年的数千场活动将搬到线上进行,在腾讯会议和企业微信上展开。
分布式数据库TDSQL
2020/03/31
3.7K0
腾讯成联合国全球合作伙伴,TDSQL如何支撑史上最大规模全球会议
TDSQL亮相国际数据库顶级会议ICDE
导读:TDSQL腾讯金融级分布式数据库,是由腾讯技术工程事业群计费平台部针对OLTP场景开发的高一致性数据库产品。ICDE,即International Conference on DataEngineering,由美国电气及电子工程师学会IEEE发起并组织,是与SIGMOD,VLDB并列的三大数据库领域的顶级会议之一。由腾讯技术工程事业群计费平台部和腾讯高校合作团队合作在巴黎ICDE2018上设立的TDSQL展台,吸引了包括图灵奖获得者Michael StoneBraker教授在内的行业人士驻足交流。 2
腾讯高校合作
2018/06/04
6970
解密Midas、Webank、金融云背后的核心数据库TDSQL【海量服务之道2.0】
如果,你在寻找一款数据库,希望: •在任何情况下,数据都不丢失或错乱; •能7*24小时不间断的对外提供服务,即使故障也不会中断; •能支撑业务量10倍以上的弹性伸缩,不用担心会被压垮; •能快速响应请求,为用户提供最爽的体验; •没学习门槛,能快速上手; •便宜,少花点钱; 那么,TDSQL就是你的菜! TDSQL(Tencent Distributed mySQL-腾讯分布式MySQL)是由腾讯技术工程事业群计费平台部针对金融联机交易场景开发的高一致性数据库集群产品。其底层基于MySQL,针对金融OLT
腾讯大讲堂
2018/02/12
1.2K0
解密Midas、Webank、金融云背后的核心数据库TDSQL【海量服务之道2.0】
微众银行数据库架构编年史
微众银行在成立之初,IT基础建设就没有选择传统的IOE集中式架构路线,转而选择采用了基于单元化的分布式架构。在这种大的背景下,微众银行的数据库的架构演进,也是
marsz
2024/12/25
2430
连载 | 深入浅出理解云数据库,年薪百万DBA之路 · 第三回
为帮助开发者更好的了解和运用数据库,腾讯云数据库团队特出品《深入浅出理解云数据库》系列文章,从数据库的基本概念到云数据库特性及应用,从数据库基础原理知识到腾讯云经典实战案例解读,带你走进云数据库的世界。关注“腾讯云数据库”微信公众号,开启2020年的DB修炼之旅。 第一回请点击:数据库的基本概念和云数据库特性 第二回请点击:云数据库的市场应用及基础原理知识 1 PartⅠ 腾讯云数据库产品总览 接下来的章节中我们以腾讯云数据库为例,来详细解读云数据库的功能和特性等。 首先来让我们用一张表来看清楚腾讯
腾讯云数据库 TencentDB
2020/02/14
1.6K0
连载 | 深入浅出理解云数据库,年薪百万DBA之路 · 第三回
客户心声|福建海峡银行TDSQL国产分布式数据库应用实践
数据库选型一直是困扰客户的难题,不仅要考虑底层的数据库技术,还需要结合企业业务特点、企业未来规划做决策。如何快速掌握数据库选型秘诀呢?答案无疑是看市场怎么做,看市场的同行是如何选择的。 近期,腾讯云数据库TDSQL助力福建海峡银行新一代核心业务系统正式上线(点击查看详情),为城商行提供核心改造解决方案。新核心关键业务系统采用“微服务+分布式”架构,改造历时14个月,依托腾讯云企业级分布式数据库TDSQL良好的兼容性、成熟的迁移能力和技术服务支持,海峡银行快速完成了核心系统的国产数据库替换,并基于腾讯云数据库
腾讯云数据库 TencentDB
2022/07/19
2.4K0
客户心声|福建海峡银行TDSQL国产分布式数据库应用实践
腾讯分布式数据库TDSQL金融级能力的架构原理解读
为帮助开发者更好地了解和学习分布式数据库技术,2020年3月,腾讯云数据库、云加社区联合腾讯TEG数据库工作组特推出为期3个月的国产数据库专题线上技术沙龙《你想了解的国产数据库秘密,都在这!》,邀请数十位鹅厂资深数据库专家每周二和周四晚上在线深入解读TDSQL、CynosDB/CDB、TBase三款鹅厂自研数据库的核心架构、技术实现原理和最佳实践等。三月为TDSQL专题月,本文将带来直播回顾第一篇《腾讯自研分布式数据库TDSQL核心架构及特性拆解》。
分布式数据库TDSQL
2020/03/18
6.7K0
腾讯分布式数据库TDSQL金融级能力的架构原理解读
NewSQL 在微众银行核心批量场景的应用
本文由微众银行数据库负责人胡盼盼撰写,介绍了微众银行自 2014 年以来从传统 RDBMS 到 NewSQL 的架构演进,以及 TiDB 在微众银行核心批量场景的应用。
PingCAP
2021/11/10
7270
破解分布式数据库的高可用难题:TDSQL高可用方案实现
腾讯云数据库国产数据库专题线上技术沙龙正在火热进行中,3月12日张文的分享已经结束,没来得及参与的小伙伴不用担心,以下就是直播的视频和文字回顾。
腾讯云数据库 TencentDB
2020/03/25
3.8K0
腾讯云数据库,双料第一!
刚刚,IDC发布报告《中国金融行业分布式事务型数据库市场份额,2023:技术验证结束,迎接高速增长》:
小腾资讯君
2024/07/18
2430
一杯咖啡时间完成部署!TDSQL全球灵活部署实践
腾讯云数据库国产数据库专题线上技术沙龙已圆满结束,本期带来毕汉斌分享的《从0到1搭建一个高可用的TDSQL集群》直播视频和文字回顾。 关注“腾讯云数据库”公众号,回复“0331毕汉斌”,即可下载直播分享PPT。 1 前言 为帮助开发者更好地了解和学习分布式数据库技术,2020年3月-5月,腾讯云数据库、云加社区联合腾讯TEG数据库工作组特推出国产数据库专题线上技术沙龙,邀请数十位鹅厂资深数据库专家在线深入解读TDSQL、CDB/CynosDB、TBase三款鹅厂自研数据库的核心架构、技术实现原理和最佳实践
腾讯云数据库 TencentDB
2020/06/24
9440
一文带你了解TDSQL的这一面
随着互联网时代的到来,企业的在线业务量也随之骤增,海量的数据访问和存储压力已经触达了传统集中式数据库的能力边界,无法为客户带来更快更稳定的业务性能。同时,无论是国家层面还是企业层面,对数据库技术自主可控的要求也更加迫切,特别是企业数据库业务层面存在以下三个痛点: 业务迁移费时费力 改造难:与原数据库数据和语法兼容性不足,导致用户需要对原有业务系统进行大量改造。 扩容难:为满足业务的快速增长带来的业务的计算与存储需求,用户需要对原有业务进行扩容。传统的数据库扩容代价大,需要中断业务数据搬迁等才能完成扩容操作。
腾讯云数据库 TencentDB
2023/01/18
1.1K0
一文带你了解TDSQL的这一面
推荐阅读
相关推荐
腾讯私有云MySQL解决方案—TDSQL
更多 >
目录
  • 在此之前我们是如何处理
  • System.Net.Http.Json 介绍
  • 使用 HttpClient 发送和接收Json数据
  • 使用 HttpClient 获取Json数据
  • 转码
  • 从HttpContent 处理Json
  • 发送Json数据
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档