云服务器内容精选
-
支持与限制的命令 用户在连接到社区版文档数据库后,需要关注以下支持以及限制的命令。 更多信息,请参见MongoDB官方文档。 如下表所示,“√”表示当前版本支持该命令,“×”表示当前版本不支持该命令。 表1 支持与限制的命令 命令类别 命令名称 3.4 4.0 4.2 备注 Aggregates Commands aggregate √ √ √ - count √ √ √ - distinct √ √ √ - group √ √ √ - mapReduce √ √ √ 在DDS实例关联参数模板中设置参数“security.javascriptEnabled”的值为“true”后,可以使用该命令。更多信息,请参见如何使用MapReduce命令。 Geospatial Commands geoNear √ √ √ - geoSearch √ √ √ - Query and Write Operation Commands find √ √ √ - insert √ √ √ - update √ √ √ - delete √ √ √ - findAndModify √ √ √ - getMore √ √ √ - getLastError √ √ √ - resetError √ √ √ - getPrevError √ √ √ - parallelCollectionScan √ √ √ - Query Plan Cache Commands planCacheListFilters √ √ √ - planCacheSetFilter √ √ √ - planCacheClearFilters √ √ √ - planCacheListQueryShapes √ √ √ - planCacheListPlans √ √ √ - planCacheClear √ √ √ - Authentication Commands logout √ √ √ - authenticate √ √ √ - copydbgetnonce √ √ √ - getnonce √ √ √ - authSchemaUpgrade x x x 系统内部命令。 User Management Commands createUser √ √ √ - updateUser √ √ √ - dropUser √ √ √ - dropAllUsersFromDatabase √ √ √ - grantRolesToUser √ √ √ - revokeRolesFromUser √ √ √ - usersInfo √ √ √ - Role Management Commands invalidateUserCache √ √ √ - createRole √ √ √ - updateRole √ √ √ - dropRole √ √ √ - dropAllRolesFromDatabase √ √ √ - grantPrivilegesToRole √ √ √ - revokePrivilegesFromRole √ √ √ - grantRolesToRole √ √ √ - revokeRolesFromRole √ √ √ - rolesInfo √ √ √ - Replication Commands replSetElect x x x 系统内部命令。 replSetUpdatePosition x x x 系统内部命令。 appendOplogNote x x x 系统内部命令。 replSetFreeze x x x 系统内部命令。 replSetGetStatus √ √ √ - replSetInitiate x x x 系统内部命令。 replSetMaintenance x x x 系统内部命令。 replSetReconfig x x x 系统内部命令。 replSetStepDown x x x 系统内部命令。 replSetSyncFrom x x x 系统内部命令。 replSetRequestVotes x x x 系统内部命令。 replSetDeclareElectionWinner x x x 系统内部命令。 resync x x x 系统内部命令。 applyOps x x x 系统内部命令。 isMaster √ √ √ - replSetGetConfig x x x 系统内部命令。 Sharding Commands flushRouterConfig √ √ √ 高危命令。 addShard x x x 越权操作。 addShardToZone √ √ √ - balancerStart √ √ √ - balancerStatus √ √ √ - balancerStop √ √ √ - removeShardFromZone √ √ √ - updateZoneKeyRange √ √ √ - cleanupOrphaned x x x 高危命令。 checkShardingIndex x x x 系统内部命令。 enableSharding √ √ √ - listShards x x x 系统内部命令。 removeShard x x x 高危命令。 getShardMap x x x 系统内部命令。 getShardVersion √ √ √ - mergeChunks √ √ √ - setShardVersion x x x 系统内部命令。 shardCollection √ √ √ - shardingState x x x 系统内部命令。 unsetSharding x x x 系统内部命令。 split √ √ √ - splitChunk √ √ √ - splitVector √ √ √ - moveChunk √ √ √ - movePrimary √ x √ - isdbgrid √ √ √ - Administration Commands setFeatureCompatibilityVersion √ √ √ - renameCollection √ √ √ - dropDatabase √ √ √ - listCollections √ √ √ - drop √ √ √ - create √ √ √ - clone x x x 系统内部命令。 cloneCollection √ √ √ - cloneCollectionAsCapped √ √ √ - convertToCapped √ √ √ - filemd5 √ √ √ - createIndexes √ √ √ - listIndexes √ √ √ - dropIndexes √ √ √ - fsync √ √ √ - clean x x x 系统内部命令。 connPoolSync x x x 系统内部命令。 connectionStatus √ √ √ - compact x x x 高危命令。 collMod √ √ √ - reIndex √ √ √ - setParameter x x x 系统配置命令。 getParameter √ √ √ - repairDatabase x x x 高危命令。 repairCursor x x x 系统内部命令。 touch √ √ √ - shutdown x x x 高危命令。 logRotate x x x 高危命令。 killOp √ √ √ - releaseFreeMemory √ √ √ - Diagnostic Commands availableQueryOptions √ √ √ - buildInfo √ √ √ - collStats √ √ √ - connPoolStats x x x 系统内部命令。 cursorInfo x x x 系统内部命令。 dataSize √ √ √ - dbHash x x x 系统内部命令。 dbStats √ √ √ - diagLogging x x x 系统内部命令。 driverO IDT est x x x 系统内部命令。 explain √ √ √ - features √ √ √ - getCmdLineOpts x x x 系统内部命令。 getLog x x x 系统内部命令。 hostInfo x x x 系统内部命令。 isSelf x x x 系统内部命令。 listCommands √ √ √ - listDatabases √ √ √ - netstat x x x 系统内部命令。 ping √ √ √ - profile √ √ √ - serverStatus √ √ √ - shardConnPoolStats x x x 系统内部命令。 top √ √ √ - validate x x x 系统配置命令。 whatsmyuri √ √ √ - Internal Commands handshake x x x 系统内部命令。 _recvChunkAbort x x x 系统内部命令。 _recvChunkCommit x x x 系统内部命令。 _recvChunkStart x x x 系统内部命令。 _recvChunkStatus x x x 系统内部命令。 _replSetFresh x x x 系统内部命令。 mapreduce.shardedfinish x x x 系统内部命令。 _transferMods x x x 系统内部命令。 replSetHeartbeat x x x 系统内部命令。 replSetGetRBID x x x 系统内部命令。 _migrateClone x x x 系统内部命令。 replSetElect x x x 系统内部命令。 writeBacksQueued x x x 系统内部命令。 writebacklisten x x x 系统内部命令。 System Events Auditing Commands logApplicationMessage x x x 系统内部命令。 父主题: 数据库使用
-
如何查看 GaussDB (DWS)表是行存还是列存? 表的存储方式由建表语句中的ORIENTATION参数控制,row表示行存,column表示列存。 8.1.2及之前版本,不指定ORIENTATION参数,默认为row行存。 8.1.3版本后,支持通过GUC参数default_orientation控制,即创建表时,如果不指定ORIENTATION参数时,则根据该GUC参数的值来创建对应类型的表。其中,row表示行存表,column表示列存表,column enabledelta表示创建开启delta表的列存表。该GUC可通过DWS控制台进行设置,如下图。 查看已创建的表是行存还是列存,可通过表定义函数PG_GET_TABLEDEF查询。 如下orientation=column表示为列存表。 目前暂不支持通过ALTER TABLE语句修改ORIENTATION参数,即行存表和列存表无法直接进行转换。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT * FROM PG_GET_TABLEDEF('customer_t1'); pg_get_tabledef ----------------------------------------------------------------------------------- SET search_path = tpchobs; + CREATE TABLE customer_t1 ( + c_customer_sk integer, + c_customer_id character(5), + c_first_name character(6), + c_last_name character(8) + ) + WITH (orientation=column, compression=middle, colversion=2.0, enable_delta=false)+ DISTRIBUTE BY HASH(c_last_name) + TO GROUP group_version1; (1 row) 父主题: 数据库使用
-
如何导出某张表结构? 建议使用Data Studio图形化客户端进行表数据导出,支持以下几种常见场景: 指定某张表数据的导出。 某个schema下的所有表数据的导出。 某个数据库下的所有表数据的导出。 具体操作请参见导出表数据。 除了使用Data Studio,您也可以通过gs_dump和gs_dumpall工具进行数据导出,支持以下几种常见场景: 导出单个数据库: 数据库级导出。 模式级导出。 表级导出。 导出所有数据库: 数据库级导出。 各库全局对象导出。 具体操作请参见gs_dump和gs_dumpall。 父主题: 数据库使用
-
扩展JSON语义: 表2 扩展JSON语义 关键字 作用 filter 在查询语句中json查询的关键字。 term 查询时判断某个document是否包含某个具体的值。 match 将被询值进行分词,进行全文检索。 range 查询指定某个字段在某个特定的范围。(范围查询子关键字:"eq"/"gte"/"gt"/"lte"/"lt") bool 必须和 "must"、"should"、"must not" 一起组合出复杂的查询。 must bool类型的子查询,封装"term"、"match"、"range" 查询。 should bool类型的子查询,封装"term"、"match"、"range" 查询。 must not bool类型的子查询,封装"term"、"match"、"range" 查询。 sort 支持全局索引列排序功能。
-
操作步骤 使用如下命令创建一个新的数据库db_tpcds。 1 2 openGauss=# CREATE DATABASE db_tpcds; CREATE DATABASE 数据库名称遵循SQL标识符的一般规则。当前角色自动成为此新数据库的所有者。 如果一个数据库系统用于承载相互独立的用户和项目,建议把它们放在不同的数据库里。 如果项目或者用户是相互关联的,并且可以相互使用对方的资源,则应该把它们放在同一个数据库里,但可以规划在不同的模式中。模式只是一个纯粹的逻辑结构,某个模式的访问权限由权限系统模块控制。 创建数据库时,若数据库名称长度超过63字节,server端会对数据库名称进行截断,保留前63个字节,因此建议数据库名称长度不要超过63个字节。 查看数据库 使用\l元命令查看数据库系统的数据库列表。 1 openGauss=# \l 使用如下命令通过系统表pg_database查询数据库列表。 1 openGauss=# SELECT datname FROM pg_database; 修改数据库。 用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。 使用如下命令为数据库重新命名。 1 2 openGauss=# ALTER DATABASE db_tpcds RENAME TO human_tpcds; ALTER DATABASE 执行完参数设置后,需要手动执行CLEAN CONNECTION清理旧连接,否则可能存在节点间参数值不一致。 删除数据库 用户可以使用DROP DATABASE命令删除数据库。这个命令删除了数据库中的系统目录,并且删除了带有数据的磁盘上的数据库目录。用户必须是数据库的owner或者系统管理员才能删除数据库。当有人连接数据库时,删除操作会失败。删除数据库时请先连接到其他的数据库。 使用如下命令删除数据库: 1 2 openGauss=# DROP DATABASE human_tpcds; DROP DATABASE
-
背景信息 初始时,GaussDB包含两个模板数据库template0、template1,以及一个默认的用户数据库postgres。 CREATE DATABASE实际上通过拷贝模板数据库来创建新数据库。只支持拷贝template0。请避免使用客户端或其他手段连接及操作两个模板数据库。 模板数据库中没有用户表,可通过系统表PG_DATABASE查看模板数据库属性。 模板template0不允许用户连接;模板template1只允许数据库初始用户和系统管理员连接,普通用户无法连接。 数据库系统中会有多个数据库,但是同一时刻客户端程序只能连接一个数据库。当前,不支持在不同的数据库之间进行相互查询(跨库查询或跨库事务)。 当一个数据库集群中存在多个数据库时,可以通过客户端工具的-d参数指定目标数据库进行登录,也可以在客户端程序登录数据库以后通过\c命令进行数据库切换。
-
注意事项 如果数据库的编码为SQL_ASCII(可以通过“show server_encoding”命令查看当前数据库存储编码),则在创建数据库对象时,如果对象名中含有多字节字符(例如中文),超过数据库对象名长度限制(63字节)的时候,数据库会将最后一个字节(而不是字符)截断,可能造成出现半个字符的情况。 针对这种情况,请遵循以下条件: 保证数据对象的名称不超过限定长度。 使用例如utf-8编码集作为数据库的默认存储编码集(server_encoding)。 不要使用多字节字符作为对象名。 如果出现因为误操作导致在多字节字符的中间截断而无法删除数据库对象的现象,请使用截断前的数据库对象名进行删除操作,或将该对象从各个数据库节点的相应系统表中依次删掉。
-
背景信息 初始时,GaussDB包含两个模板数据库template0、template1,以及一个默认的用户数据库postgres。postgres默认的兼容数据库类型为O(即DBCOMPATIBILITY = A ),该兼容类型下将空字符串作为NULL处理。 CREATE DATABASE实际上通过拷贝模板数据库来创建新数据库。默认情况下,拷贝template0。请避免使用客户端或其他手段连接及操作两个模板数据库。 模板数据库中没有用户表,可通过系统表PG_DATABASE查看模板数据库属性。 模板template0不允许用户连接;模板template1只允许数据库初始用户和系统管理员连接,普通用户无法连接。 GaussDB允许创建的数据库总数目上限为128个。 数据库系统中会有多个数据库,但是客户端程序一次只能连接一个数据库。也不能在不同的数据库之间相互查询。一个GaussDB中存在多个数据库时,需要通过-d参数指定相应的数据库实例进行连接。
-
操作步骤 使用如下命令创建一个新的数据库db_tpcc。 1 2 openGauss=# CREATE DATABASE db_tpcc; CREATE DATABASE 数据库名称遵循SQL标识符的一般规则。当前角色自动成为此新数据库的所有者。 如果一个数据库系统用于承载相互独立的用户和项目,建议把它们放在不同的数据库里。 如果项目或者用户是相互关联的,并且可以相互使用对方的资源,则应该把它们放在同一个数据库里,但可以规划在不同的模式中。模式只是一个纯粹的逻辑结构,某个模式的访问权限由权限系统模块控制。 创建数据库时,若数据库名称长度超过63字节,server端会对数据库名称进行截断,保留前63个字节,因此建议数据库名称长度不要超过63个字节。 查看数据库 使用\l元命令查看数据库系统的数据库列表。 1 openGauss=# \l 使用如下命令通过系统表pg_database查询数据库列表。 1 openGauss=# SELECT datname FROM pg_database; 修改数据库 用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。 使用以下命令为数据库设置默认的模式搜索路径。 1 2 openGauss=# ALTER DATABASE db_tpcc SET search_path TO pa_catalog,public; ALTER DATABASE 使用如下命令为数据库重新命名。 1 2 openGauss=# ALTER DATABASE db_tpcc RENAME TO human_tpcds; ALTER DATABASE 删除数据库 用户可以使用DROP DATABASE命令删除数据库。这个命令删除了数据库中的系统目录,并且删除了磁盘上带有数据的数据库目录。用户必须是数据库的owner或者系统管理员才能删除数据库。当有人连接数据库时,删除操作会失败。删除数据库时请先连接到其他的数据库。 使用如下命令删除数据库: 1 2 openGauss=# DROP DATABASE human_tpcds; DROP DATABASE
-
注意事项 如果数据库的编码为SQL_ASCII(可以通过“show server_encoding;”命令查看当前数据库存储编码),则在创建数据库对象时,如果对象名中含有多字节字符(例如中文),超过数据库对象名长度限制(63字节)的时候,数据库将会将最后一个字节(而不是字符)截断,可能造成出现半个字符的情况。 针对这种情况,请遵循以下条件: 保证数据对象的名称不超过限定长度。 修改数据库的默认存储编码集(server_encoding)为utf-8编码集。 不要使用多字节字符作为对象名。 创建的数据库总数目建议不超过128个。 如果出现因为误操作导致在多字节字符的中间截断而无法删除数据库对象的现象,请使用截断前的数据库对象名进行删除操作,或将该对象从各个数据库节点的相应系统表中依次删掉。
-
创表参数 吞吐量参数:Z00_THROUGHPUT,该参数与表的写性能上限有关,默认值为 big,即标准写性能上限。 低吞吐量 CREATE TABLE test1 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_THROUGHPUT = 'small'; 中吞吐量 CREATE TABLE test2 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_THROUGHPUT = 'medium'; 高吞吐量 CREATE TABLE test3 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_THROUGHPUT = 'big'; 指定表tokens数目:表示创建表时候表的tokens数目,tokens数目必须大于1。 CREATE TABLE test4 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z01_TABLE_TOKENS = 24; 表参数:Z00_BUFFER_SIZE 、Z00_BUFFER_NUMBER(不推荐使用)。 创表时可以指定存储层memtable的大小和个数。 Z00_BUFFER_SIZE为map类型,指定对应cf name和value值 ,value值取值范围2~32之间。 CREATE TABLE test6 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_BUFFER_SIZE = {'default': 16}; Z00_BUFFER_NUMBER为map类型,指定对应cf name和value值,取值范围2~8之间。 CREATE TABLE test5 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_BUFFER_NUMBER = {'default': 3}; 如果创建完成的表需要调整表规格,比如达到表上限,需要将表规格调小,以创建更多的表,则可以通过如下参数调整。 将所有创建表调小为medium,则可以多建一倍数量的表 ALTER TABLE keyspace_name.table_name WITH Z00_THROUGHPUT = 'medium'; 将所有创建表调小为small,则可以多建两倍数量的表 ALTER TABLE keyspace_name.table_name WITH Z00_THROUGHPUT = 'small';
-
创表数目计算方式 根据实例规格不同,创表需要的内存稍有不同,以4U16GB实例为例,可以简单按照单张表768MB计算。 所以创表数目上限=集群可用总内存/单表所需内存 奇数数目集群 集群可用内存=节点内存/2*(N/2+1) 偶数数目集群 集群可用内存=节点内存/2*(N/2) 例如: 3节点4U16GB实例的可用内存=16/2*(3/2+1)=16GB 创表数目上限=16*1024MB/768MB=21 4节点4U16GB实例的可用内存=16/2*(4/2)=16GB 创表数目上限=16*1024MB/768MB=21 5节点4U16GB实例可用内存=16/2*(5/2+1)=24GB 创表数目上限=24*1024MB/768MB=32 根据上述计算方式,4U16GB规格实例的节点个数和表个数对应关系,请参见表1。 表1 4U16GB规格实例的节点数和表个数对应关系 实例规格 节点数量 表个数 4U16GB 3 21 4 21 5 32 6 32 7 42 8 42 9 53 10 53 11 64 12 64 单表占用内存为768MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计算,换算公式为(768/12)*tokens个数。 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。 根据上述计算方式,8U32GB规格实例的节点个数和表个数对应关系,请参见表2。 表2 8U32GB规格实例的节点个数和表个数对应关系 实例规格 节点个数 表个数 8U32GB 3 22 4 22 5 34 6 34 7 45 8 45 9 56 10 56 11 68 12 68 单表占用内存为1440MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计算,换算公式为(1440/ 12 )* tokens个数。 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。 根据上述计算方式,16U64GB规格节点个数和表个数对应关系,请参见表3。 表3 16U64GB规格节点个数和表个数对应关系 实例规格 节点个数 表个数 16U64GB 3 45 4 45 5 68 6 68 7 91 8 91 9 113 10 113 11 136 12 136 单表占用内存1440MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计算,换算公式为(1440/ 12 )* tokens个数。 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。 根据上述计算方式,32U128GB规格节点个数和表个数对应关系,请参见表4。 表4 32U128GB规格节点个数和表个数对应关系 实例规格 节点个数 表个数 32U128GB 3 68 4 68 5 102 6 102 7 136 8 136 9 170 10 170 11 204 12 204 单表占用内存1920MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计算。换算公式为 (1920 / 12 )* tokens个数。 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。
-
GeminiDB Redis规格变更包含的在线变更和离线变更有什么区别,通常需要多长时间,对业务有哪些影响? 在线变更:变更过程中,节点依次滚动变更,变更时长跟节点数正相关,每个节点约需5~10分钟。除此之外,主备和集群实例都包含3个内部管理节点,会同时进行变更。例如一个GeminiDB Redis实例有3个worker节点,包含3个内部管理节点,共计6个节点,在线变更时长约在30-60分钟。单个节点变更过程中,对业务影响是秒级抖动,需要业务有重连机制。建议在业务低峰期间变更,实例CPU和内存利用率保持低位,避免单节点变更时,其他节点负载过高,进程拉起失败等异常情况。 离线变更:离线变更时,全部节点将并行变更,变更过程中业务不可用,会导致业务中断约10-20分钟左右。通常适用于停服期、无业务访问等场景。请谨慎操作! 对于您的线上生产业务,建议使用在线变更。详细操作内容请参变更实例的CPU和内存规格。 父主题: 数据库使用
-
GeminiDB Redis什么时候进入只读 为保护GeminiDB Redis实例的正常运行,在存储空间即将被写满的时候,数据库会被设置成只读状态,该状态下只支持数据的读取,不支持写入和更新,可以通过扩容存储容量来解除该状态,重新获得写入和更新的能力。 表1 实例设置只读状态说明 存储容量 说明 小于600GB 存储容量使用率达到97%时,实例状态被设置为只读。 存储容量使用率下降到85%,实例自动解除只读状态。 大于或等于600GB 存储容量剩余空间小于18GB,实例状态被设置为只读。 存储容量剩余空间大于或等于90GB,实例自动解除只读状态。 父主题: 数据库使用
-
分片设计规范 对于使用DDS分片集群,建议尽可能的使用分片集合以充分利用性能,详情请参见设置数据分片以充分利用分片性能。 分片集合使用上建议如下: 对于大数据量(数据量过百万),并有较高读写请求的业务场景,数据量随着业务量增大而增大的,建议采用分片。 对于采用hash分片的集合,需要根据业务后面实际数据量大小,采用预分片,提前预置chunk数量,减少自动均衡和分裂对业务运行造成影响。 对于非空集合开启分片,应将均衡器的开启时间窗放在业务空闲时,避免分片间均衡数据与业务冲突影响性能。设置时间窗口的API接口详情请参见设置集群均衡活动时间窗。 需要基于分片键排序查询且增加数据时可以分布均匀建议使用范围分片,其他使用哈希分片。 合理设计shard key,防止出现大量的数据使用相同shard key,导致出现jumbo chunk。 使用分片集群,执行dropDatabase后,一定要执行flushRouterConfig命令,详情请参见如何规避dds mongos路由缓存缺陷。 业务的update请求需要注意与片键相适配。在使用分片表时,如果出现如下场景则update请求会报错,并返回“An upsert on a sharded collection must contain the shard key and have the simple collation”。 update请求的filter中未携带片键字段且选项multi:false set中未携带片键字段且选项upsert:true
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格