• 关于 comment命令 的搜索结果

问题

MaxCompute用户指南:常用命令:资源操作

行者武松 2019-12-01 22:01:47 1267 浏览量 回答数 0

问题

任何文件都不能上传 出现“严重文件传输错误”字样

白杨1 2019-12-01 21:54:05 2251 浏览量 回答数 0

回答

在命令行中,使用git tag –a tagname –m 'comment'可以快速创建一个标签。 需要注意,命令行创建的标签只存在本地Git库中,还需要使用Git push –tags指令发布到服务器的Git库中。

珍宝珠 2019-12-02 03:20:32 0 浏览量 回答数 0

新用户福利专场,云服务器ECS低至96.9元/年

新用户福利专场,云服务器ECS低至96.9元/年

回答

登录客户端。 运行客户端工具bin目录下的MaxCompute客户端(Linux系统下运行./bin/odpscmd,Windows下运行./bin/odpscmd.bat)登录。首先确认进入的项目空间名称是否正确。本例中项目空间名称为MaxCompute_DOC,如果不是该项目,您可以使用如下命令切换至该项目。 use MaxCompute_DOC; 切换成功如下图所示。完成 创建表。使用如下建表语句创建表,详细介绍请参见表操作。 CREATE TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [LIFECYCLE days] [AS select_statement] 本文中,需要创建表bank_data和表result_table。bank_data用于存储业务数据,result_table用于存储数据分析后产生的结果。 bank_data建表语句如下所示。 CREATE TABLE IF NOT EXISTS bank_data ( age BIGINT COMMENT '年龄', job STRING COMMENT '工作类型', marital STRING COMMENT '婚否', education STRING COMMENT '教育程度', default STRING COMMENT '是否有信用卡', housing STRING COMMENT '房贷', loan STRING COMMENT '贷款', contact STRING COMMENT '联系途径', month STRING COMMENT '月份', day_of_week STRING COMMENT '星期几', duration STRING COMMENT '持续时间', campaign BIGINT COMMENT '本次活动联系的次数', pdays DOUBLE COMMENT '与上一次联系的时间间隔', previous DOUBLE COMMENT '之前与客户联系的次数', poutcome STRING COMMENT '之前市场活动的结果', emp_var_rate DOUBLE COMMENT '就业变化速率', cons_price_idx DOUBLE COMMENT '消费者物价指数', cons_conf_idx DOUBLE COMMENT '消费者信心指数', euribor3m DOUBLE COMMENT '欧元存款利率', nr_employed DOUBLE COMMENT '职工人数', y BIGINT COMMENT '是否有定期存款' ); 直接运行上述建表语句即可,成功后您会看到OK字样。 说明 如果客户端执行报错,建议您手动输入SQL语句执行,或者使用DataWorks临时查询功能运行SQL语句,详细请参考使用临时查询运行SQL语句(可选)。 result_table建表语句如下所示。 CREATE TABLE IF NOT EXISTS result_table ( education STRING COMMENT '教育程度', num BIGINT COMMENT '人数' );

LiuWH 2020-03-19 18:19:00 0 浏览量 回答数 0

问题

SQL MINUS / EXCEPT命令模拟仅在插入时用于列

养狐狸的猫 2019-12-01 20:00:51 8 浏览量 回答数 0

回答

#pragma comment( lib, "..//debug//libTest.lib" 是微软C/C++编译器才能识别的特殊指令,而在编译命令后加-l"../debug/libTest.lib"是GCC的编译开关(GCC会忽略掉这一句pragma)

a123456678 2019-12-02 02:40:32 0 浏览量 回答数 0

问题

C++ 语法错误 : 缺少“;”(在“const”的前面)

a123456678 2019-12-01 19:44:30 1027 浏览量 回答数 1

问题

阿里云主机如何安装makegcc这类的开发工具

ap8376d8i 2019-12-01 20:20:09 7607 浏览量 回答数 4

回答

mysql的定时任务一般用event(事件)来完成,触发器无法完成。一、通过mysql的命令行客户端来完成 1、set global event_scheduler =1; //开启event_scheduler 执行这个语句如果出现,可在mysql的配置文档中设置[mysqld]段中添加 event_scheduler=ON 如果重启mysql;这种情况下依然出错,Error Code: 1290. The MySQL server is running with the --event-scheduler=DISABLED or --skip-grant-tables option so it cannot execute this statement,这个错误是说启动服务器时如果指定了--skip-grant-tables选项,则event_scheduler则自动被设置为DISABLED。命令行或配置文件的设置都会被覆盖。建议重现安装mysql或是修改启动参数(在系统服务中指定)。 查看event_scheduler状态:show status like '%event%'; 或SELECT @@event_scheduler; 2、CREATE PROCEDURE Mypro() //创建存储过程 BEGIN update userinfo SET endtime = now() WHERE id = '155'; END; 3、创建event My_enevt,每隔三十秒执行一次 create event if not exists e_test on schedule every 30 second on completion preserve do call Mypro(); 4、关闭事件 alter event e_test ON COMPLETION PRESERVE DISABLE; 5、开启事件 alter event e_test ON COMPLETION PRESERVE ENABLE; 语法: CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement; schedule: AT TIMESTAMP [+ INTERVAL INTERVAL] | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP] INTERVAL: quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND} 答案来源于网络,供参考,希望有所帮助。

问问小秘 2019-12-02 02:18:04 0 浏览量 回答数 0

回答

本文是以PHP7作为基础,讲解如何从零开始创建一个PHP扩展。本文主要讲解创建一个扩展的基本步骤都有哪些。示例中,我们将实现如下功能:<?php echo say(); ?>输出内容:$ php ./test.php $ hello word在扩展中实现一个say方法,调用say方法后,输出 hello word。第一步:生成代码PHP为我们提供了生成基本代码的工具 ext_skel。这个工具在PHP源代码的./ext目录下。$ cd php_src/ext/ $ ./ext_skel --extname=sayextname参数的值就是扩展名称。执行ext_skel命令后,这样在当前目录下会生成一个与扩展名一样的目录。第二步,修改config.m4配置文件config.m4的作用就是配合phpize工具生成configure文件。configure文件是用于环境检测的。检测扩展编译运行所需的环境是否满足。现在我们开始修改config.m4文件。$ cd ./say $ vim ./config.m4打开,config.m4文件后,你会发现这样一段文字。 dnl If your extension references something external, use with: dnl PHP_ARG_WITH(say, for say support, dnl Make sure that the comment is aligned: dnl [ --with-say Include say support]) dnl Otherwise use enable: dnl PHP_ARG_ENABLE(say, whether to enable say support, dnl Make sure that the comment is aligned: dnl [ --enable-say Enable say support])其中,dnl 是注释符号。上面的代码说,如果你所编写的扩展如果依赖其它的扩展或者lib库,需要去掉PHP_ARG_WITH相关代码的注释。否则,去掉 PHP_ARG_ENABLE 相关代码段的注释。我们编写的扩展不需要依赖其他的扩展和lib库。因此,我们去掉PHP_ARG_ENABLE前面的注释。去掉注释后的代码如下:dnl If your extension references something external, use with: dnl PHP_ARG_WITH(say, for say support, dnl Make sure that the comment is aligned: dnl [ --with-say Include say support]) dnl Otherwise use enable: PHP_ARG_ENABLE(say, whether to enable say support, Make sure that the comment is aligned: [ --enable-say Enable say support])第三步,代码实现修改say.c文件。实现say方法。找到PHP_FUNCTION(confirm_say_compiled),在其上面增加如下代码:PHP_FUNCTION(confirm_say_compiled) { zend_string *strg; strg = strpprintf(0, "hello word"); RETURN_STR(strg); }找到 PHP_FE(confirm_say_compiled, 在上面增加如下代码:PHP_FE(say, NULL)修改后的代码如下:const zend_function_entry say_functions[] = { PHP_FE(say, NULL) /* For testing, remove later. */ PHP_FE(confirm_say_compiled, NULL) /* For testing, remove later. */ PHP_FE_END /* Must be the last line in say_functions[] */ }; /* }}} */第四步,编译安装编译扩展的步骤如下:$ phpize $ ./configure $ make && make install修改php.ini文件,增加如下代码:[say] extension = say.so然后执行,php -m 命令。在输出的内容中,你会看到say字样。第五步,调用测试自己写一个脚本,调用say方法。看输出的内容是否符合预期。完整代码下载完整代码下载参考来源PHP7扩展开发之hello word

exinnet 2019-12-02 01:31:09 0 浏览量 回答数 0

回答

对于数据库中的事实表(以及一些比较大的表),通常建议使用表分区。使用表分区功能,方便定期的进行数据的删除(通过alter table drop patition命令即可删除整个分区的数据)和导入(使用交换分区的方式即alter table exchange patition命令可以加入新数据分区)。HybridDB支持Range Partition(范围分区)、List Partition(列表分区)和Composite Partition(多级分区)。注意Range Partition只支持利用数值或时间类型的字段来分区。下面是一个使用Range Partition的表的例子。更多详细的说明和例子可以参见文档以及Greenplum官方文档。CREATE TABLE LINEITEM ( L_ORDERKEY BIGINT NOT NULL, L_PARTKEY BIGINT NOT NULL, L_SUPPKEY BIGINT NOT NULL, L_LINENUMBER INTEGER, L_QUANTITY FLOAT8, L_EXTENDEDPRICE FLOAT8, L_DISCOUNT FLOAT8, L_TAX FLOAT8, L_RETURNFLAG CHAR(1), L_LINESTATUS CHAR(1), L_SHIPDATE DATE, L_COMMITDATE DATE, L_RECEIPTDATE DATE, L_SHIPINSTRUCT CHAR(25), L_SHIPMODE CHAR(10), L_COMMENT VARCHAR(44) ) WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5, BLOCKSIZE=1048576, OIDS=false) DISTRIBUTED BY (l_orderkey) PARTITION BY RANGE (L_SHIPDATE) (START (date '1992-01-01') INCLUSIVE END (date '2000-01-01') EXCLUSIVE EVERY (INTERVAL '1 month' ));

卓刀 2019-12-01 23:46:35 0 浏览量 回答数 0

问题

Linux系统下MySQL数据库导出与导入操作

chuanshuolian 2019-12-01 20:11:40 7547 浏览量 回答数 0

问题

MaxCompute用户指南:常用命令:表操作

行者武松 2019-12-01 22:01:45 1376 浏览量 回答数 0

回答

Create Table 命令格式 CREATE TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [LIFECYCLE days] [AS select_statement] CREATE TABLE [IF NOT EXISTS] table_name LIKE existing_table_name 功能说明 创建表。表可以为分区表或者非分区表。 在创建表时,如果不指定IF NOT EXISTS选项而存在同名表,则返回出错;如果指定此选项,则无论是否存在同名表,即使原表结构与要创建的目标表结构不一致,均返回成功。已存在的同名表的元信息不会被改动。 参数说明 table_name 创建表的表名。表名大小写不敏感,不能有特殊字符,只能用英文的a-z、A-Z、数字和下划线(_),且以字母开头,名称的长度不超过128字节,否则报错。 col_name 创建表的列名。列名大小写不敏感,不能有特殊字符,只能用英文的a-z、A-Z、数字和下划线(_),且以字母开头,名称的长度不超过128字节,否则报错。 col_comment 列注释内容。注释内容是长度不超过1024字节的有效字符串,否则报错。 table_comment 表注释内容。注释内容是长度不超过1024字节的有效字符串,否则报错。 data_type 列的数据类型。包括BIGINT、DOUBLE、BOOLEAN、DATETIME、DECIMAL和STRING等多种数据类型。更多信息请参见数据类型。 PARTITIONED BY 指定表的分区字段。MaxCompute 1.0版仅支持STRING类型。MaxCompute 2.0版对分区类型的支持进行了扩充,支持TINYINT、SMALLINT、INT、BIGINT、VARCHAR和STRING分区类型。当利用分区字段对表进行分区时,新增分区、更新分区内数据和读取分区数据均不需要做全表扫描,提高处理效率。 说明 分区值不能包含双字节字符(如中文),必须是以英文字母A-Z开头。A-Z开始后可跟字母数字,名称的长度不超过128字节。允许的字符包括空格、冒号(:)、下划线(_)、美元符($)、井号(#)、点(.)、感叹号(!)和(@),其他字符的行为未定义,例如(\t)、(\n)、(/)等 。 目前,在表中建的分区层次不能超过6级。一个表允许的分区个数支持按照具体的Project配置,默认60,000个。 LIFECYCLE 指明此表的生命周期,仅支持正整数。单位:天。 对于非分区表:自最后一次数据被修改开始计算,经过days天后数据仍未被改动,则此表无需您干预,将会被MaxCompute自动回收(类似drop table操作)。 对于分区表:根据各分区的LastDataModifiedTime判断该分区是否该被回收。不同于非分区表,分区表的最后一个分区被回收后,该表不会被删除。生命周期只能设定到表级别,不能在分区级设置生命周期。 说明 CREATE TABLE LIKE语句不会复制源表的生命周期属性。 示例 --如果没有同名表存在,创建一张分区表sale_deail。 shop_name STRING, customer_id STRING, total_price DOUBLE) PARTITIONED BY (sale_date STRING,region STRING); --创建非分区表test1。 create table test1 (key string); --创建分区表test2。 create table test2 (key bigint) partitioned by (pt string, ds string); --创建带有生命周期的表test3。 create table test3 (key boolean) partitioned by (pt string, ds string) lifecycle 100; -- 除生命周期属性外,test4的其他属性(字段类型、分区类型等)均与test3完全一致。 create table test4 like test3; -- 这个操作会创建test5,但分区生命周期信息不会被拷贝到目标表中。此操作仅会将test2的数据复制到test5中(如果test2有数据,此示例中test2为空表,后续章节会介绍数据导入)。 create table test5 as select * from test2;

LiuWH 2020-03-19 22:28:11 0 浏览量 回答数 0

回答

[root@master1] ~$ kubectl describe svc example-service Name: example-service Namespace: default Labels: run=load-balancer-example Annotations: Selector: run=load-balancer-example Type: NodePort IP: 10.96.224.67 Port: 80/TCP TargetPort: 80/TCP NodePort: 31454/TCP Endpoints: 10.244.0.2:80,10.244.3.2:80,10.244.4.2:80 Session Affinity: None External Traffic Policy: Cluster Events: 答案是 iptables。 Service Cluster IP 是一个虚拟 IP,是由 Kubernetes 节点上的 iptables 规则管理的。 可以通过 iptables-save 命令打印出当前节点的 iptables 规则 -A KUBE-SERVICES ! -s 10.244.0.0/16 -d 10.96.224.67/32 -p tcp -m comment --comment "default/example-service: cluster IP" -m tcp --dport 80 -j KUBE-MARK-MASQ -A KUBE-SERVICES -d 10.96.224.67/32 -p tcp -m comment --comment "default/example-service: cluster IP" -m tcp --dport 80 -j KUBE-SVC-BR4KARPIGKMRMN3E 这两条规则的含义是: 如果 Cluster 内的 Pod(源地址来自 10.244.0.0/16)要访问 httpd-svc,则允许。 其他源地址访问 httpd-svc,跳转到规则 KUBE-SVC-BR4KARPIGKMRMN3E。 KUBE-SVC-BR4KARPIGKMRMN3E 规则如下: -A KUBE-SVC-BR4KARPIGKMRMN3E -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-GVCUN5Q2CADPMXQN -A KUBE-SVC-BR4KARPIGKMRMN3E -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-7EB3JKJSNOWKCEL2 -A KUBE-SVC-BR4KARPIGKMRMN3E -j KUBE-SEP-MFV34SBILX27ERI2 1/3的概率跳转到规则 KUBE-SEP-GVCUN5Q2CADPMXQN。 1/3 的概率(剩下 2/3 的一半)跳转到规则 KUBE-SEP-7EB3JKJSNOWKCEL2。 1/3 的概率跳转到规则 KUBE-SEP-MFV34SBILX27ERI2。 上面三个跳转的规则如下: -A KUBE-SEP-7EB3JKJSNOWKCEL2 -s 10.244.3.2/32 -j KUBE-MARK-MASQ -A KUBE-SEP-7EB3JKJSNOWKCEL2 -p tcp -m tcp -j DNAT --to-destination 10.244.3.2:80 -A KUBE-SEP-GVCUN5Q2CADPMXQN -s 10.244.0.2/32 -j KUBE-MARK-MASQ -A KUBE-SEP-GVCUN5Q2CADPMXQN -p tcp -m tcp -j DNAT --to-destination 10.244.0.2:80 -A KUBE-SEP-MFV34SBILX27ERI2 -s 10.244.4.2/32 -j KUBE-MARK-MASQ -A KUBE-SEP-MFV34SBILX27ERI2 -p tcp -m tcp -j DNAT --to-destination 10.244.4.2:80 即将请求分别转发到后端的三个 Pod。通过上面的分析,我们得到如下结论: iptables 将访问 Service 的流量转发到后端 Pod,而且使用类似轮询的负载均衡策略。 另外需要补充一点:Cluster 的每一个节点都配置了相同的 iptables 规则,这样就确保了整个 Cluster 都能够通过 Service 的 Cluster IP 访问 Service

问问小秘 2019-12-27 16:00:46 0 浏览量 回答数 0

问题

如何使用表分区?

云栖大讲堂 2019-12-01 21:28:24 875 浏览量 回答数 0

回答

您有2个基本选项(至少): 1,看一下事件调度器 首先创建表,例如。带字段的stock_dumps 商品代码,数量,平均成本,ttlval,转储日期(DATETIME) CREATE EVENT Dumping_event ON SCHEDULE EVERY 1 DAY ON COMPLETION NOT PRESERVE ENABLE COMMENT '' DO BEGIN INSERT INTO stock_dumps(itemcode, quantity, avgcost, ttlval,dump_date) SELECT itmcode, quantity, avgcost, (avgcost * quantity)as ttlval, NOW() FROM table_1 JOIN table_2 ON table_1.itmcode = table_2.itmcode; END 请按照说明在上面发布的链接上启用调度程序。注意:旧版本的mysql没有事件调度程序 2,创建cron作业/ windows计划作业: 创建sql文件: INSERT INTO stock_dumps(itemcode, quantity, avgcost, ttlval,dump_date) SELECT itmcode, quantity, avgcost, (avgcost * quantity)as ttlval, NOW() FROM table_1 JOIN table_2 ON table_1.itmcode = table_2.itmcode; 调度此命令: mysql -uusername -ppassword < /path/to/sql_file.sql来源:stack overflow

保持可爱mmm 2020-05-13 14:31:10 0 浏览量 回答数 0

问题

如何创建数据库、创建分布键和查询

云栖大讲堂 2019-12-01 21:28:13 1747 浏览量 回答数 0

问题

MaxCompute用户指南:SQL:DDL语句

行者武松 2019-12-01 22:02:56 2158 浏览量 回答数 0

问题

DDL索引

nicenelly 2019-12-01 21:25:11 968 浏览量 回答数 0

问题

DDL索引

nicenelly 2019-12-01 21:10:38 1084 浏览量 回答数 0

回答

为了应对突发的数据库请求流量、资源消耗过高的语句访问以及SQL访问模型的变化, 保证MySQL实例持续稳定运行,阿里云提供基于语句规则的并发控制CCL(Concurrency Control),并提供了工具包(DBMS_CCL)便于您快捷使用。 前提条件 实例版本为RDS MySQL 8.0。 注意事项 CCL的操作不产生Binlog,所以CCL的操作只影响当前实例。例如主实例进行CCL操作,不会同步到备实例、只读实例或灾备实例。 CCL提供超时机制以应对DML导致事务锁死锁,等待中的线程也会响应事务超时和线程KILL操作以应对死锁。 功能设计 CCL规则定义了如下三个维度的特征: SQL command SQL命令类型,例如SELECT、UPDATE、INSERT、DELETE等。 Object SQL命令操作的对象,例如TABLE、VIEW等。 keywords SQL命令的关键字。 创建CCL规则表 AliSQL设计了一个系统表(concurrency_control)保存CCL规则,系统启动时会自动创建该表,无需您手动创建。这里提供表的创建语句供您参考: CREATE TABLE concurrency_control ( Id bigint(20) NOT NULL AUTO_INCREMENT, Type enum('SELECT','UPDATE','INSERT','DELETE') NOT NULL DEFAULT 'SELECT', Schema_name varchar(64) COLLATE utf8_bin DEFAULT NULL, Table_name varchar(64) COLLATE utf8_bin DEFAULT NULL, Concurrency_count bigint(20) DEFAULT NULL, Keywords text COLLATE utf8_bin, State enum('N','Y') NOT NULL DEFAULT 'Y', Ordered enum('N','Y') NOT NULL DEFAULT 'N', PRIMARY KEY (Id) ) /*!50100 TABLESPACE mysql */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Concurrency control' 参数 说明 Id CCL规则ID。 Type SQL command,即SQL命令类型。 Schema_name 数据库名。 Table_name 数据库内的表名。 Concurrency_count 并发数。 Keywords 关键字,多个关键字用英文分号(;)分隔。 State 本规则是否启用。 Ordered Keywords中多个关键字是否按顺序匹配。 管理CCL规则 为了便捷地管理CCL规则,AliSQL在DBMS_CCL中定义了四个本地存储规则。详细说明如下: add_ccl_rule 增加规则。命令如下: dbms_ccl.add_ccl_rule(' ','<Schema_name>','<Table_name>',<Concurrency_count>,' '); 示例: SELECT语句的并发数为10。 mysql> call dbms_ccl.add_ccl_rule('SELECT', '', '', 10, ''); SELECT语句中出现关键字key1的并发数为20。 mysql> call dbms_ccl.add_ccl_rule('SELECT', '', '', 20, 'key1'); test.t表的SELECT语句的并发数为10。 mysql> call dbms_ccl.add_ccl_rule('SELECT', '', '', 10, ''); 说明 Id越大,规则的优先级越高。 del_ccl_rule 删除规则。命令如下: dbms_ccl.del_ccl_rule( ); 示例: 删除规则ID为15的CCL规则。 mysql> call dbms_ccl.del_ccl_rule(15); 说明 如果删除的规则不存在,系统会报相应的警告,您可以使用show warnings;查看警告内容。 mysql> call dbms_ccl.del_ccl_rule(100); Query OK, 0 rows affected, 2 warnings (0.00 sec) mysql> show warnings; +---------+------+----------------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------------+ | Warning | 7514 | Concurrency control rule 100 is not found in table | | Warning | 7514 | Concurrency control rule 100 is not found in cache | +---------+------+----------------------------------------------------+ show_ccl_rule 查看内存中已启用规则。命令如下: dbms_ccl.show_ccl_rule(); 示例: ​mysql> call dbms_ccl.show_ccl_rule(); +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+ | ID | TYPE | SCHEMA | TABLE | STATE | ORDER | CONCURRENCY_COUNT | MATCHED | RUNNING | WAITTING | KEYWORDS | +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+ | 17 | SELECT | test | t | Y | N | 30 | 0 | 0 | 0 | | | 16 | SELECT | | | Y | N | 20 | 0 | 0 | 0 | key1 | | 18 | SELECT | | | Y | N | 10 | 0 | 0 | 0 | | +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+​ 关于MATCHED、RUNNING和WAITTING的说明如下。 参数 说明 MATCHED 规则匹配成功次数。 RUNNING 此规则下正在并发执行的线程数。 WAITTING 此规则下正在等待执行的线程数。 flush_ccl_rule 如果您直接操作了表concurrency_control修改规则,规则不能立即生效,您需要让规则重新生效。命令如下: dbms_ccl.flush_ccl_rule(); 示例: ​mysql> update mysql.concurrency_control set CONCURRENCY_COUNT = 15 where Id = 18; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> call dbms_ccl.flush_ccl_rule(); Query OK, 0 rows affected (0.00 sec)​ 功能测试 测试规则 设计如下三条规则对应三个维度: call dbms_ccl.add_ccl_rule('SELECT', 'test', 'sbtest1', 3, ''); //SELECT命令操作表sbtest1并发数为3 call dbms_ccl.add_ccl_rule('SELECT', '', '', 2, 'sbtest2'); //SELECT命令关键字sbtest2并发数为2 call dbms_ccl.add_ccl_rule('SELECT', '', '', 2, ''); //SELECT命令并发数为2 测试场景 使用sysbench进行测试,场景如下: 64 threads 4 tables select.lua 测试结果 查看规则并发数情况如下: ​mysql> call dbms_ccl.show_ccl_rule(); +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+ | ID | TYPE | SCHEMA | TABLE | STATE | ORDER | CONCURRENCY_COUNT | MATCHED | RUNNING | WAITTING | KEYWORDS | +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+ | 20 | SELECT | test | sbtest1 | Y | N | 3 | 389 | 3 | 9 | | | 21 | SELECT | | | Y | N | 2 | 375 | 2 | 14 | sbtest2 | | 22 | SELECT | | | Y | N | 2 | 519 | 2 | 34 | | +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+ 3 rows in set (0.00 sec)​ 查看RUNNING列,符合预期的并行数量。

游客yl2rjx5yxwcam 2020-03-08 13:26:34 0 浏览量 回答数 0

问题

如何使用CREATE TABLE数据定义语言

云栖大讲堂 2019-12-01 21:28:42 1357 浏览量 回答数 0

问题

ImageMagick 魔咒:报错

kun坤 2020-06-08 11:10:10 3 浏览量 回答数 1

问题

MaxCompute快速入门:创建/查看/删除表

行者武松 2019-12-01 22:01:35 2553 浏览量 回答数 0

问题

MANIFEST.MF个例中配置详解:报错

kun坤 2020-06-14 07:12:56 0 浏览量 回答数 1

问题

MANIFEST.MF个例中配置详解 - maven报错

montos 2020-06-02 21:31:35 0 浏览量 回答数 1

回答

创建作业文件。 描述 在提交作业接口调用之前,会先调用该接口创建一个作业的配置文件。 请求参数 字段 类型 是否必须 默认值 描述 Action String 是 - 操作接口名,系统规定参数,取值:CreateJobFile RegionId String 否 - 地域ID ClusterId String 是 - 集群ID TargetFile String 是 - 目标文件 Content String 是 - 作业文件内容 RunasUser String 是 - 作业所属用户 RunasUserPassword String 是 - 作业用户密码 返回参数 返回公共返回参数。 示例 请求示例 https://ehpc.cn-hangzhou.aliyuncs.com/?Action=CreateJobFile&RegionId=cn-hangzhou&ClusterId=<集群ID>&TargetFile=/home/testuser1/lammps.pbs&Content=<作业内容>&RunasUser=testuser&RunasUserPassword=<用户密码>&<公共请求参数> 返回示例 XML格式 8C337EA7-B27E-46C5-A640-164CCA173F1F JSON格式 { "RequestId": "8C337EA7-B27E-46C5-A640-164CCA173F1F", } 错误码 查询E-HPC接口错误码请访问 错误码。更多错误码,请访问 API 错误中心。 批量删除作业。 描述 批量删除作业,在删除作业前,您可以: 调用ListJobs查询作业列表 请求参数 字段 类型 是否必须 默认值 描述 Action String 是 - 操作接口名,系统规定参数,取值:DeleteJobs RegionId String 是 - 地域ID ClusterId String 是 - 集群ID Jobs String 是 - 作业Id列表 [{“Id”:”xx”}],如:[{“Id”:”2.scheduler”}] 返回参数 公共参数,了解更多请参阅 公共参数。 示例 请求示例 https://ehpc.cn-hangzhou.aliyuncs.com/?Action=DeleteJobs&RegionId=cn-hangzhou&ClusterId=<集群ID>&Jobs=[{"Id":"1"}, {"Id":"2"}]&<公共请求参数> 返回示例 XML格式 04F0F334-1335-436C-A1D7-6C044FE73368 JSON格式 { "RequestId": "04F0F334-1335-436C-A1D7-6C044FE73368", } 错误码 查询E-HPC接口错误码请访问 错误码。更多错误码,请访问 API 错误中心。 查询作业列表。 描述 查询单个集群中作业列表。 请求参数 字段 类型 是否必须 默认值 描述 Action String 是 - 操作接口名,系统规定参数,取值:ListJobs RegionId String 是 - 地域ID ClusterId String 是 - 集群ID Owner String 否 - 作业owner State String 否 - 作业状态, finished / notfinish PageNumber Integer 否 1 显示的页码,起始值为 1 PageSize Integer 否 10 每页显示的条数,1-50 返回参数 除公共返回参数外返回如下结果: 字段 类型 描述 Jobs Array 作业信息数组,JobInfo结构见下面的对象描述 TotalCount Integer 列表条目总数 PageNumber Integer 当前页码 PageSize Integer 本页条数 其中,每个JobInfo结构包含以下字段: 字段 类型 描述 Id String 作业ID Name String 作业名称 Owner String 作业owner Priority Integer 优先级 State String 作业状态 NodeList String 执行作业节点列表 SubmitTime String 作业提交时间 StartTime String 作业开始时间 LastModifyTime String 作业最后修改时间 Stdout String 标准输出位置 Stderr String 错误输出位置 Comment String 作业当前描述 ArrayRequest String 队列作业的队列输入,例如 1-10:2, 如果不是作队列,可以为空 Resources Struct 作业运行所需资源 ShellPath String 运行程序路径 Rerunable String 作业是否可重运行(只有pbs支持) 其中,Resources 结构包含以下字段: 字段 类型 描述 Nodes String 作业运行的节点数量 Cores String 作业运行的cpu核数 示例 请求示例 https://ehpc.cn-hangzhou.aliyuncs.com/?Action=ListJobs&RegionId=cn-hangzhou&ClusterId=<集群ID>&<公共请求参数> 返回示例 XML格式 04F0F334-1335-436C-A1D7-6C044FE73368 1 1 1 root 2018-07-18T17:46:47 4294901759 sleepjob.sh COMPLETED 2018-07-18T17:46:58 2 2018-07-18T17:46:48 ['compute1', 'compute3'] 2 0 JSON格式 { "RequestId": "04F0F334-1335-436C-A1D7-6C044FE73368", "TotalCount": 1, "PageNumber": 1, "PageSize": 1, "Jobs": { "JobInfo": [ { "Owner": "root", "SubmitTime": "2018-07-18T17:46:47", "Stderr": "", "Comment": "", "ArrayRequest": "", "Priority": "4294901759", "Name": "sleepjob.sh", "State": "COMPLETED", "LastModifyTime": "2018-07-18T17:46:58", "Stdout":"", "Id": "2", "StartTime": "2018-07-18T17:46:48", "NodeList":"['compute1', 'compute3']", "Resources": { "Nodes": 2, "Cores": 0 } } ] } } 错误码 查询E-HPC接口错误码请访问 错误码。更多错误码,请访问 API 错误中心。 设置作业owner。 描述 在单个集群中设置作业owner。 请求参数 字段 类型 是否必须 默认值 描述 Action String 是 - 操作接口名,系统规定参数,取值:SetJobUser RegionId String 是 - 地域ID ClusterId String 是 - 集群ID Runasuser String 是 - 作业owner RunasUserPassword String 是 - 作业owner密码 返回参数 公共参数,了解更多请参阅 公共参数。 示例 请求示例 https://ehpc.cn-hangzhou.aliyuncs.com/?Action=SetJobUser&RegionId=cn-hangzhou&ClusterId=<集群ID>&Runasuser=<作业用户名>&RunasUserPassword=<作业用户密码>&<公共请求参数> 返回示例 XML格式 04F0F334-1335-436C-A1D7-6C044FE73368 JSON格式 { "RequestId": "04F0F334-1335-436C-A1D7-6C044FE73368", } 错误码 查询E-HPC接口错误码请访问 错误码。更多错误码,请访问 API 错误中心。 批量停止作业。 描述 用户可以批量停止作业,在停止作业前,您可以: 调用ListJobs查询作业列表 请求参数 字段 类型 是否必须 默认值 描述 Action String 是 - 操作接口名,系统规定参数,取值:StopJobs RegionId String 是 - 地域ID ClusterId String 是 - 集群ID Jobs String 是 - 作业ID列表,格式为: [{“Id”:”xx”}],如:[{“Id”:”2.scheduler”}] 返回参数 公共参数,了解更多请参阅 公共参数。 示例 请求示例 https://ehpc.cn-hangzhou.aliyuncs.com/?Action=StopJobs&RegionId=cn-hangzhou&ClusterId=<集群ID>&Jobs=[{"Id":"1"},{"Id":"2"}]&<公共请求参数> 返回示例 XML格式 04F0F334-1335-436C-A1D7-6C044FE73368 JSON格式 { "RequestId": "04F0F334-1335-436C-A1D7-6C044FE73368" } 错误码 查询E-HPC接口错误码请访问 错误码。更多错误码,请访问 API 错误中心。 提交作业。 描述 在单个集群提交作业,在提交作业前,您可以: 调用CreateJobTemplate创建作业模板 调用ListJobTemplates查看作业模板列表 注意:请先把作业文件(e.g. job.sh)放到集群节点上再进行作业的提交。 请求参数 字段 类型 是否必须 默认值 描述 Action String 是 - 操作接口名,系统规定参数,取值:SubmitJob RegionId String 是 - 地域ID ClusterId String 是 - 集群ID CommandLine String 是 - 作业命令 Name String 否 - 作业名称 RunasUser String 是 - 作业owner RunasUserPassword String 是 - owner password Priority Integer 否 - 作业优先级 PackagePath String 否 - 作业命令所在目录 StdoutRedirectPath String 否 - stdout输出目录 StderrRedirectPath String 否 - stderr输出目录 ReRunable Boolean 否 - 作业是否支持rerun ArrayRequest String 否 - 队列作业, 格式是1-10:2 Variables String 否 - 作业的环境变量,格式是:[{Name:,Value:},{Name:,Value:}] ContainerId String 否 - 容器应用Id。如果选择使用容器则需提供容器应用Id。 InputFileUrl String 否 - 引入作业文件的URL地址。 PostCmdLine String 否 - 作业后处理命令。 UnzipCmd String 否 - 解压命令。接下使用oss下载的文件。 返回参数 除公共返回参数外返回如下结果: 字段 类型 描述 JobId String 作业ID 示例 请求示例 https://ehpc.cn-hangzhou.aliyuncs.com/?Action=SubmitJob&RegionId=cn-hangzhou&ClusterId=<集群ID>&CommandLine=/home/exampleUser/job.sh&RunasUser=exampleUser&RunasUserPassword=<用户密码>&<公共请求参数> 返回示例 XML格式 04F0F334-1335-436C-A1D7-6C044FE73368 1 JSON格式 { "RequestId": "04F0F334-1335-436C-A1D7-6C044FE73368", "JobId": "1" } 错误码 查询E-HPC接口错误码请访问 错误码。更多错误码,请访问 API 错误中心。

1934890530796658 2020-03-23 22:50:23 0 浏览量 回答数 0

回答

回 1楼ivmmff的帖子 怎么在ssh上用?我用 systemctl status vsftpd看它状态是正常的 ------------------------- Re各位大神,请问为什么命令行访问ftp不能用ls,dir命令? 恩,ssh能用ls.    # Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon more usable. # Please see vsftpd.conf.5 for all compiled in defaults. # # READ THIS: This example file is NOT an exhaustive list of vsftpd options. # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's # capabilities. # # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=NO # # Uncomment this to allow local users to log in. # When SELinux is enforcing check for SE bool ftp_home_dir local_enable=YES # # Uncomment this to enable any form of FTP write command. write_enable=YES # allow_writeable_chroot=YES # # Default umask for local users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) local_umask=022 # # Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. # When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access #anon_upload_enable=YES # # Uncomment this if you want the anonymous FTP user to be able to create # new directories. #anon_mkdir_write_enable=YES # # Activate directory messages - messages given to remote users when they # go into a certain directory. dirmessage_enable=YES # # Activate logging of uploads/downloads. xferlog_enable=YES # # Make sure PORT transfer connections originate from port 20 (ftp-data). connect_from_port_20=YES # # If you want, you can arrange for uploaded anonymous files to be owned by # a different user. Note! Using "root" for uploaded files is not # recommended! #chown_uploads=YES #chown_username=whoever # # You may override where the log file goes if you like. The default is shown # below. #xferlog_file=/var/log/xferlog # # If you want, you can have your log file in standard ftpd xferlog format. # Note that the default log file location is /var/log/xferlog in this case. xferlog_std_format=YES # # You may change the default value for timing out an idle session. #idle_session_timeout=600 # # You may change the default value for timing out a data connection. #data_connection_timeout=120 # # It is recommended that you define on your system a unique user which the # ftp server can use as a totally isolated and unprivileged user. #nopriv_user=ftpsecure # # Enable this and the server will recognise asynchronous ABOR requests. Not # recommended for security (the code is non-trivial). Not enabling it, # however, may confuse older FTP clients. #async_abor_enable=YES # # By default the server will pretend to allow ASCII mode but in fact ignore # the request. Turn on the below options to have the server actually do ASCII # mangling on files when in ASCII mode. # Beware that on some FTP servers, ASCII support allows a denial of service # attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd # predicted this attack and has always been safe, reporting the size of the # raw file. # ASCII mangling is a horrible feature of the protocol. #ascii_upload_enable=YES #ascii_download_enable=YES # # You may fully customise the login banner string: #ftpd_banner=Welcome to blah FTP service. # # You may specify a file of disallowed anonymous e-mail addresses. Apparently # useful for combatting certain DoS attacks. #deny_email_enable=YES # (default follows) #banned_email_file=/etc/vsftpd/banned_emails # # You may specify an explicit list of local users to chroot() to their home # directory. If chroot_local_user is YES, then this list becomes a list of # users to NOT chroot(). # (Warning! chroot'ing can be very d-a-n-gerous. If using chroot, make sure that # the user does not have write access to the top level directory within the # chroot) chroot_local_user=YES chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list # # You may activate the "-R" option to the builtin ls. This is disabled by # default to avoid remote users being able to cause excessive I/O on large # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume # the presence of the "-R" option, so there is a strong case for enabling it. #ls_recurse_enable=YES # # When "listen" directive is enabled, vsftpd runs in standalone mode and # listens on IPv4 sockets. This directive cannot be used in conjunction # with the listen_ipv6 directive. listen=YES # # This directive enables listening on IPv6 sockets. By default, listening # on the IPv6 "any" address (::) will accept connections from both IPv6 # and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6 # sockets. If you want that (perhaps because you want to listen on specific # addresses) then you must run two copies of vsftpd with two configuration # files. # Make sure, that one of the listen options is commented !! #listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES    这是我的vsftpd.conf, 请问下有问题吗? ------------------------- 回 3楼ivmmff的帖子 请问我的配置对吗? ------------------------- 回 8楼dongshan8的帖子 好的,那我就用ftp软件好了,谢谢! ------------------------- 回 7楼鬼才神兵的帖子 谢谢! ------------------------- 回 6楼ivmmff的帖子 没关系,谢谢!

锋在吼 2019-12-02 02:34:02 0 浏览量 回答数 0

回答

public synchronized void insert() {     ... } 试试这个。######您好,请问 如果我不用这种同步的方法, 只用事务隔离可以解决吗###### 加synchronized比较简单暴力,性价比最好。更优的方式是添加流水单号,根据流水单号进行同步或者异步添加。但是需要实现很多内容。######简单暴力、好处是 Java 端当掉了并发的压力,数据库还是一个个进出,压力不会落到数据库上。哈哈哈######  transactionl###### 两次插入请求和事务没太大关系,上面的加synchronize关键字在一台机器上的时候算是一个办法,但不是可行的办法,这相当于把所有任务都串行了,浪费服务器资源。这种情况可以有几种处理办法: 1. 数据库加唯一索引,如果有唯一列可以标识的话 2. 两行重复在事务完成之后做一个删除判断,将id比较小的(大的也OK,只要逻辑一致)几条删掉,只保留一条 3. 加分布式锁,这也需要唯一标识来加锁 4. 不完美的解决办法,前端保证短时间内只发一次请求(正常用户没有问题,容易被hack,但可以挡正常流量,这应该是必须要做的)###### 引用来自“52iSilence7”的评论 两次插入请求和事务没太大关系,上面的加synchronize关键字在一台机器上的时候算是一个办法,但不是可行的办法,这相当于把所有任务都串行了,浪费服务器资源。这种情况可以有几种处理办法: 1. 数据库加唯一索引,如果有唯一列可以标识的话 2. 两行重复在事务完成之后做一个删除判断,将id比较小的(大的也OK,只要逻辑一致)几条删掉,只保留一条 3. 加分布式锁,这也需要唯一标识来加锁 4. 不完美的解决办法,前端保证短时间内只发一次请求(正常用户没有问题,容易被hack,但可以挡正常流量,这应该是必须要做的) 增加分布式锁,注意释放锁死锁情况。 楼上说的比较ID大小的方法仅限于ID是自增情况,如果是UUID不适用。  ######  事务和并发问题 事务和并发,这两个并不是一个对等的概念。 先给出简单解决方案,具体的实现在下文会给出。   第一种方式(推荐):   给数据添加唯一索引,这种方式能解决,但是会影响效率。   第二种方式:   如果是分布式项目,可以使用分布式锁,具体可以通过redis或者zookeeper来实现,   如果是单点项目,可以使用同步代码块来实现。   第三种方式(推荐):   使用insert where not exists 语句来限制插入。   第四种方式:   使用redis的`SETNX`方法来实现。     在具体业务中,我们更推荐第一种方式和第三种方式相结合的形式,但是大多数业务场景中,往往只采用第一种方式即可。   具体解决方案和思路。   在关系型数据库中(如MySql),一个事务可以是一条SQL语句,或者一组SQL语句。 其展现形式大致如下:   ``` BEGIN; /*开启事务*/ SQL 1; SQL 2; SQL 3; COMMIT;/ROLLBACK; /*提交或回滚*/ ```   他的具体表现是,上面一组SQL(SQL 1/SQL 2/SQL 3)在执行时,他们同时生效或者同时失败。   并发场景重现   如题所诉,假设`报名表`由下列字段构成   ``` CREATE TABLE `sign_up` (   `user_id` varchar(32) NOT NULL COMMENT '用户ID',   `create_time` datetime NOT NULL COMMENT '用户报名时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ```   题中目前的操作应该大致如下:   ``` BEGIN; /*step1:从数据库获取当前用户是否已经报名*/ SELECT su.user_id,su.create_time FROM sign_up su WHERE user_id = ''; /*step2:如果用户未报名,则在数据库中插入数据*/ INSERT INTO sign_up values('',NOW()); COMMIT; ``` 此时代码本身是有漏洞的,当请求并发时,可能触发下列场景。   请求A: `SELECT su.user_id,su.create_time FROM sign_up su WHERE user_id = '123';` 请求B: `SELECT su.user_id,su.create_time FROM sign_up su WHERE user_id = '123';` 请求A: `INSERT INTO sign_up values('123',NOW());` 请求B: `INSERT INTO sign_up values('123',NOW());`   数据库在未添加唯一索引的场景下会插入两条数据,添加唯一索引的场景下则会报错`唯一索引冲突`。   此时虽然开启了事务,但是在整个执行过程中,如果没有开启唯一索引,SQL都是执行成功的,不会触发`ROLLBACK`; 如果开启了唯一索引,此时应该也就没有这个疑问了。   解决方案 针对这种问题,其实可以采取几种常见的方式来解决。 第一种方式: 在单点部署的工程中,可以通过对核心代码部分添加同步来解决,比如使用`synchronized`或者`ReentrantLock`来实现, 限制部分代码的并发访问,但是这样必然会降低该接口的效率,而且,在分布式工程内,该解决方法并不适用 ,所以不建议使用。   第二种方式: 通过分布式一致性锁来实现 针对第一种方案,通过分布式一致性锁取代常规同步块,进而实现在分布式工程中将并发转为同步。 分布式一致锁的实现方案有很多种,常见的有基于redis实现和基于zookeeper实现。   第三种方式:给数据库字段添加唯一索引 `ALTER TABLE sign_up ADD UNIQUE INDEX `user_id`(`user_id`);` 或者 `CREATE UNIQUE INDEX user_id ON sign_up(user_id); ` 这种方式通过在数据库端来限制表中不得同时存在同一用户的多条数据,这种方式实现比较简单,推荐使用,但是通过抛异常的形式来实现功能,会损失部分效率。   第四种方式: 使用`insert where not exists` 类型的语句来实现 ``` INSERT INTO sign_up (user_id, create_time) SELECT     '123', NOW() FROM     DUAL WHERE     NOT EXISTS (         SELECT             user_id         FROM             sign_up         WHERE             user_id = '123'     ); ```   这种方式,实现上将select 语句和insert语句合并到一起执行,避免了题中描述的并发问题,因为从实现上`insert`语句的执行依赖于`select`语句的查询结果 ,从根本上就避免了题中涉及到的并发问题,使用这种方式调用端可以根据`SQL`执行影响的行数来判断是否插入成功,进而执行对应的业务逻辑 ,这种方式普适性较强,推荐使用。   第五种方式,借助`redis`的`SETNX`方法来实现 ``` SETNX 是 ‘SET if Not eXists’的简称,命令格式大致如下:SETNX [key] [value]. 作用是:将指定的[key]的值设为[value],如果给定的key已经存在,则SETNX不做任何操作。 设置成功,该方法返回1,设置失败,该方法返回0. ``` 借助`SETNX`命令,我们可以将题中的`select`语句改为该方式,根据`SETNX`的返回值来执行相应的业务逻辑。 tips: 该方法需要注意redis的key值失效时间。   上诉五种方式都可以解决该问题。   问题产生的本质原因   下面再简单聊一下,并发和事务的问题。   事务有四大特性:A(原子性),C(一致性),I(隔离性),D(持久性)。   其中   - 原子性表示:事务所包含的所有操作,要么全部成功,要么全部失败。   - 一致性表示:事务执行前后必须处于一致性状态。   - 隔离性:当多个用户并发访问数据库的时候,多个并发线程相互隔离。   - 持久性:事务一旦被提交,对数据库的改变是永久性的,即使数据库系统遭遇故障也不会丢失提交的事务。   出现题中的问题,应该是混淆了原子性和隔离性的概念,原子性只是保证了事务中包含的操作要么同时成功,要么同时失败。 他并不会帮助我们处理业务代码中产生的并发问题,同理隔离性要求处理的是数据库并发,而不是业务并发。   在题中,业务代码内的两条SQL在没有配置唯一索引的场景下,并发时,并不会产生SQL执行失败的场景,两条语句默认都是成功的 ,这也就意味着事务最终是提交(`COMMIT`)的,进而导致数据库出现两条数据。   为了解决这种问题,我们的思路往往可以放在如何在业务层面将会出现并发问题的代码原子化,比如本文给出的解决方案,均是基于此而实现的。  ###### 加锁处理、唯一索引、基于redis防止重复提交###### 1.数据库的唯一索引 2.如果不是分布式部署的话上java锁 3.如果是分布式的话上基于redis的分布式锁 4.最好用lock锁 锁代码就可 没必要锁整个方法

kun坤 2020-06-07 22:25:21 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播