数据中心行业主要上市公司:世纪互联(VNET)、万国数据(GDS)、光环新网(300383)、宝信软件(600845)、数据港(603881)、鹏博士(600804)、奥飞数据(300738)等。

本文核心数据:万国数据IDC业务收入、毛利率、数据中心运营面积

1、中国数据中心行业龙头企业全方位对比

第三方IDC运营商是指提供机柜租用、带宽租用、主机托管、代理运维等数据中心服务的企业。与构建数据中心主要为支持销售自身带宽的基础电信运营商不同,第三方IDC运营商可以提供多个网络的连接服务,并且网络不以运营商和省份边界划分。

目前,我国龙头第三方IDC运营商分别为世纪互联、万国数据。世纪互联是国内IDC行业的标志性公司,主要以零售模式销售,收入规模处于业内领先水平。万国数据是目前国内IDC业务成长性最高的公司。

公司官网 ODCC 中国信通院等 图表1:2020年中国数据中心行业龙头企业全方位对比

1

2、万国数据:数据中心业务的布局历程

万国数据创立于2001年,公司起初专注于提供业务的可持续性发展和灾备解决方案,主要以向第三方批发租赁数据中心的方式服务金融机构。2009年公司成立独立实体开始布局自建数据中心,在上海和成都自主开发的数据中心于2010-2011年陆续投入使用,2013-2014年实现第二阶段的扩建,并在北京和深圳市场开发了首个数据中心。

2014年,公司与STT GDC建立战略合作伙伴关系,并此后将业务中心转向云服务商,2016年在纳斯达克完成首次公开招股,2017年被阿里巴巴和腾讯认证为数据中心服务的首选供货商及战略合作伙伴。目前所服务的超700家客户主要包括大型互联网公司、金融机构、电信与IT服务提供商以及国内大型企业和跨国公司。

公司官网 图表2:万国数据-数据中心业务布局历程

图表2:万国数据-数据中心业务布局历程

3、万国数据:数据中心业务布局及运营现状

——一线城市资源分布超80%,核心区域留存待开发储备面积充足

万国数据在国内拥有丰富的数据中心资源,一线城市作为数据中心客户需求最集中的区域,靠近客户的大规模市场供应能力将有利于公司提升存量客户份额和开拓新客户占比。截至2020年末,公司上海、江苏及周边机房面积占比36%;北京、河北及周边机房面积占比37%;粤港澳大湾区机房面积占比22%。

此外,公司在北京、上海和大湾区的核心运营机房面积分布合计占公司总运营面积比重80%以上,在建的13万平方米的数据中心均分布在以上三大经济区域。对比国内同行业其他厂商一线市场的资源分布,相较国内目前第三方中立市场相对分散的局面,公司已逐渐在行业成长期建立起先发优势。

公司公告 图表3:截至2020年末万国数据数据中心机房区域分布情况(单位:%)

图表3:截至2020年末万国数据数据中心机房区域分布情况(单位:%)

截至2020年Q3,公司在北京、上海、大湾区和成渝地区及周边主要经济区域储备了35.8万平方米留存开发待土地资源,未雨绸缪战略部署核心区域,通过与当地政府订立的具有约束力框架协议预期收购土地,以及公司为了对现有建筑物重新开发为数据中心而订立的收购或租赁协议,提前锁定价值区域核心土地资源。

余下全文 1/2 本文系OFweek根据授权转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们。 when-presentwhen-missing#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthessis: (myOptionVar.foo)!myDefault, (myOptionVar.foo)?? The failing instruction (FTL stack trace): ---------- ==> ${producttype.url?replace("//", "http... [in template "article.ftl" at line 173, column 58] ---------- Java stack trace (for programmers): ---------- freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:98) at freemarker.core.EvalUtil.coerceModelToString(EvalUtil.java:382) at freemarker.core.Expression.evalAndCoerceToString(Expression.java:115) at freemarker.core.StringBuiltins$StringBuiltIn._eval(StringBuiltins.java:87) at freemarker.core.Expression.eval(Expression.java:111) at freemarker.core.MethodCall._eval(MethodCall.java:91) at freemarker.core.Expression.eval(Expression.java:111) at freemarker.core.Expression.evalAndCoerceToString(Expression.java:115) at freemarker.core.DollarVariable.accept(DollarVariable.java:76) at freemarker.core.Environment.visit(Environment.java:265) at freemarker.core.MixedContent.accept(MixedContent.java:93) at freemarker.core.Environment.visitByHiddingParent(Environment.java:286) at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:86) at freemarker.core.Environment.visit(Environment.java:265) at freemarker.core.MixedContent.accept(MixedContent.java:93) at freemarker.core.Environment.visitByHiddingParent(Environment.java:286) at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:193) at freemarker.core.Environment.visitIteratorBlock(Environment.java:509) at freemarker.core.IteratorBlock.accept(IteratorBlock.java:103) at freemarker.core.Environment.visitByHiddingParent(Environment.java:286) at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:86) at freemarker.core.Environment.visit(Environment.java:265) at freemarker.core.MixedContent.accept(MixedContent.java:93) at freemarker.core.Environment.visitByHiddingParent(Environment.java:286) at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:86) at freemarker.core.Environment.visit(Environment.java:265) at freemarker.core.MixedContent.accept(MixedContent.java:93) at freemarker.core.Environment.visitByHiddingParent(Environment.java:286) at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:86) at freemarker.core.Environment.visit(Environment.java:265) at freemarker.core.MixedContent.accept(MixedContent.java:93) at freemarker.core.Environment.visit(Environment.java:265) at freemarker.core.Environment.process(Environment.java:243) at freemarker.template.Template.process(Template.java:277) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:366) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:283) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:233) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950) at com.netwaymedia.component.web.servlet.SpringDispatchServlet.doDispatch(SpringDispatchServlet.java:43) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) at javax.servlet.http.HttpServlet.service(HttpServlet.java:620) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)