LDB不常用,但学好它可以写出共用封装好的查询
6. 逻辑数据库 ... 56
6.1. 组成 ... 56
6.2. 结构 ... 56
6.3. 选择屏幕( Selections ) ... 57
6.3.1. PARAMETERS 屏幕参数扩充 ... 58
6.3.2. SELECTION-SCREEN 格式化屏幕 ... 58
6.3.3. DYNAMIC SELECTIONS 动态选择条件 ... 58
6.3.3.1. DYN_SEL . 60
6.3.3.1.1. RSDS_TYPE-CLAUSES . 60
6.3.3.1.2. RSDS_TYPE-TRANGE . 61
6.3.4. FIELD SELECTION 动态选择字段 ... 62
6.3.4.1. SELECT_FIELDS . 63
6.4. 数据库程序中重要 FORM .. 65
6.5. LDB 选择屏幕:静 ( 动 ) 态选择屏幕、动态选择视图 ... 66
6. 逻辑数据库
6.1. 组成
SLDB
6.2. 结构
决定了数据从哪些数据库表、视图中提取数据 , 以及这些表、视图之间的层次关系( 层次将决定数据读取的顺序 )
数据库表 ( T 类型节点)、词典类型 ( S 类型节点),比如节点类型为 S 的节点: root_node ,数据类型为 INT4 :
LDB 的数据库程序的最 TOP Include 文件包括以下语句:
NODES root_node .
另外,在 LDB 数据库程序包括了以下过程:
FORM put _root_node . DO 10 TIMES . root_node = sy - index . PUT root_node . " 会去调用报表程序中的 GET root_node. 事件块 ENDDO . ENDFORM .
在与此 LDB 关连的可执行程序:
REPORT demo_nodes . NODES root_node . GET root_node . WRITE root_node .
6.3. 选择屏幕( Selections )
定义了 LDB 的选择屏幕,该选择屏幕的布局由 LDB 的结构决定,一旦将 LDB 链接到报表程序后,该选择屏幕会自动嵌入到默认选择屏幕 1000 中
第一次进入选择屏幕程序时,系统会为每个 LDB 生成一个名为 DB<LDB_Name >SEL Include 选择屏幕包含文件:
而且,所有表( T 类型的节点)的主键都会出现在 SELECT-OPTIONS 语句中,成为屏幕选择字段(自动生成的需要去掉注释,并设置屏幕选择字段名):
除了上面自动生成的 LDB 屏幕字段外,还可以使用以下面语句来扩展 LDB 选择屏幕:
6.3.1. PARAMETERS 屏幕参数扩充
增加一个单值输入条件框( PARAMETERS 语句一般在 LDB 中只用于除节点表外的非表字段屏幕参数),在 PARAMETERS 语句中必须使用选项 FOR NODE XXX 或者 FOR TABLE XXX 来指定这些扩展参数属性哪个节点的: PARAMETERS CITYTO LIKE SPFLI-CITYTO FOR NODE SPFLI .
注: SELECT-OPTIONS 没有 FOR NODE 这样的用法
具体请参数后面的 LDB 选择屏幕章节
6.3.2. SELECTION-SCREEN 格式化屏幕
使用 SELECTION-SCREEN 语句来格式化屏幕
具体请参数后面的 LDB 选择屏幕章节
6.3.3. DYNAMIC SELECTIONS 动态选择条件
SELECTION-SCREEN DYNAMIC SELECTIONS FOR NODE|TABLE . 用来开启 节点的 LDB dynamic selections 功能,即可以在 WHERE 从句中使用动态选择条件(形如: …WHERE field1 = value1 AND ( 条件内表 ) … 只有开启了动态选择条件功能的表,才可以在 LDB 数据库程序中对表进行动态选择条件处理。下面是数据库程序中如何使用动态选择条件示例:
上面 LDB 数据库程序中的 RSDS_WHERE 条件内表来自 RSDS 类型组,相应源码如下:
另外,上面 LDB 数据库程序中要能从 DYN_SEL-CLAUSES 内表读取数据,则必须在 LDB 选择屏幕里开启相应节点的动态选择条件:
其中, DYN_SEL-CLAUSES 内表行结构如下:
6.3.3.1. DYN_SEL
PUT_ Form 中的 SELECT 语句中 Where 从句如果要使用 DYNAMIC SELECTIONS 动态选择条件 时,需要用到 变量 DYN_SEL ,该数据对象是在 LDB 数据库程序中自动生成的,其类型如下(注:不必在 LDB 程序中加入下面代码行就可以直接使用 DYN_SEL ):
TYPE-POOLS RSDS . DATA DYN_SEL TYPE RSDS_TYPE .
你不必在程序中定义它就可以直接使用,但它 只能在 LDB 数据库程序中使用,而不能用在报表程序中 。 RSDS_TYPE 数据类型是在类型组 RSDS 中定义的:
TYPE-POOL RSDS . TYPES : RSDS_WHERE_TAB LIKE RSDSWHERE OCCURS 5 . " RSDSWHERE 类型为 C(72) TYPES : BEGIN OF RSDS_WHERE , TABLENAME LIKE RSDSTABS - PRIM_TAB , WHERE_TAB TYPE RSDS_WHERE_TAB , END OF RSDS_WHERE . TYPES : RSDS_TWHERE TYPE RSDS_WHERE OCCURS 5 .
TYPES : BEGIN OF RSDS_TYPE , CLAUSES TYPE RSDS_TWHERE , TEXPR TYPE RSDS_TEXPR , TRANGE TYPE RSDS_TRANGE , END OF RSDS_TYPE .
RSDS_TYPE 是一个深层结构的结构体,里面三个字段都是内表类型,其中以下两个字段重要:
6.3.3.1.1. RSDS_TYPE-CLAUSES
为 Where 从句部分,实则存储了可直接用在 WHERE 从句中的动态 Where 条件内表,可以在 Where 动态语句中直接使用,该组件为内表,存储了用户在选择屏幕上选择的 LDB 动态选择字段
每个被选择的 LDB 屏幕动态选择字段都会形成一个条件,并存储到 RSDS_TYPE-CLAUSES-WHERE_TAB 内表中, WHERE_TAB 内表中存储的就是直接可以用在 Where 从句中的动态选择条件中
每个表(节点)都会有自己的 CLAUSES-WHERE_TAB 动态条件内表,这是通过 CLAUSES-TABLENAME 区别的
现假设有名为 ZHK 的 LDB , SCARR 为该 LDB 的根节点,且仅有 SPFLI 一个子节点。 LDB 选择屏幕 Include 文件 DBZHKSEL 内容如下:
SELECT-OPTIONS S_CARRID FOR SCARR - CARRID . SELECT-OPTIONS S_CONNID FOR SPFLI - CONNID .
" 需要先开始动态选择条件功能 SELECTION-SCREEN DYNAMIC SELECTIONS FOR TABLE SCARR .
LDB 数据库程序 SAPDBZHK 中, PUT_SCARR 过程中使用 dynamic selection 的过程如下:
FORM PUT_SCARR . STATICS : DYNAMIC_SELECTIONS TYPE RSDS_WHERE , FLAG_READ . " 定义成静态类型的是防止再次进入此 Form 时,再次初始化 DYNAMIC_SELECTIONS 结构,即只执行一次初始化代码 IF FLAG_READ = SPACE . DYNAMIC_SELECTIONS - TABLENAME = 'SCARR' . READ TABLE DYN_SEL - CLAUSES WITH KEY DYNAMIC_SELECTIONS-TABLENAME INTO DYNAMIC_SELECTIONS . FLAG_READ = 'X' . ENDIF . SELECT * FROM SCARR WHERE CARRID IN S_CARRID AND ( DYNAMIC_SELECTIONS - WHERE_TAB ) . " 使用动态 Where 条件 PUT SCARR . ENDSELECT . ENDFORM.
6.3.3.1.2. RSDS_TYPE-TRANGE
该字段是一个内表,存储了 CLAUSES 的原数据, CLAUSES 内表里的数据实质就是来源于 TRANGE 内表,只是 CLAUSES 已经将每个表字段的条件拼接成了一个或多个条件串了(形如:“ XXX 字段 = XXX 条件”),但是 TRANGE 内表与 RANGES tables 相同,存储的是字段最原始的条件值,使用时,在 WHERE 从句中使用 IN 关键字来使用这些条件值(这与 SELECT-OPTIONS 类型的屏幕参数用户是完全一样的)。
但是,使用 TRANGE 没有直接使用 CLAUSES 灵活,因为使用 TRANGE 时, WHERE 从句里的条件表字段需要事先写好,这实质上不是动态条件了,可以参考以下实例,与上面 CLAUSES 用法相比就更清楚了:现修改上面的示例:
SELECT-OPTIONS S_CARRID FOR SCARR - CARRID . SELECT-OPTIONS S_CONNID FOR SPFLI - CONNID .
" 需要先开始动态选择条件功能 SELECTION-SCREEN DYNAMIC SELECTIONS FOR TABLE SCARR .
LDB 数据库程序 SAPDBZHK 中, PUT_SCARR 过程中使用 dynamic selection 的过程如下:
FORM PUT_SCARR . STATICS : DYNAMIC_RANGES TYPE RSDS_RANGE , " 存储某个表的所有屏幕字段的 Ranges DYNAMIC_RANGE1 TYPE RSDS_FRANGE , " 存储某个屏幕字段的 Ranges DYNAMIC_RANGE2 TYPE RSDS_FRANGE , FLAG_READ . " 确保 DYN_SEL 只读取一次 IF FLAG_READ = SPACE . DYNAMIC_RANGES - TABLENAME = 'SCARR' . " 先取出 SCARR 表的所有屏幕字段的 Ranges READ TABLE DYN_SEL - TRANGE WITH KEY DYNAMIC_RANGES - TABLENAME INTO DYNAMIC_RANGES . " 再读取出属于某个字段的 Ranges DYNAMIC_RANGE1 - FIELDNAME = 'CARRNAME' . READ TABLE DYNAMIC_RANGES - FRANGE_T WITH KEY DYNAMIC_RANGE1 - FIELDNAME INTO DYNAMIC_RANGE1 . DYNAMIC_RANGE2 - FIELDNAME = 'CURRCODE' . READ TABLE DYNAMIC_RANGES - FRANGE_T WITH KEY DYNAMIC_RANGE2 - FIELDNAME INTO DYNAMIC_RANGE2 . FLAG_READ = 'X' . ENDIF . SELECT * FROM SCARR WHERE CARRID IN S_CARRID AND CARRNAME IN DYNAMIC_RANGE1- SELOPT_T " 使用 IN 关键字使用 Ranges 内表 AND CURRCODE IN DYNAMIC_RANGE2 - SELOPT_T . " (与 select-options 屏幕参数是一样的用法) PUT SCARR . ENDSELECT . ENDFORM.
6.3.4. FIELD SELECTION 动态选择字段
SELECTION-SCREEN FIELD SELECTION FOR NODE|TABLE . 语句的作用是开启节点 的动态字段选择的功能(形如: SELECT (选择字段内表) FROM… ,而不是 SELECT * FROM … ,即选择了哪些字段,就只查询哪些字段 ,而不是将所有字段查询出来,进而可以提高性能) 。
在可执行报表程序里,可以通过 GET node [ FIELDS f1 f2 ... ] 语句中的 FIELDS 选项来指定要读取字段;
另外,上面 LDB 数据库程序中要能从 SELECT_FIELDS 内表读取数据,则必须在 LDB 选择屏幕里开启相应节点的动态选择字段:
其中, SELECT_FIELDS 内表行结构如下:
6.3.4.1. SELECT_FIELDS
PUT_ Form 中的 SELECT 语句中 Where 从句如果要使用 FIELD SELECTION 动态选择字段 时,需要用到数据对象 SELECT_FIELDS ,在 LDB 数据库程序中,通过从 SELECT_FIELDS 内表中就可以读取 GET node [FIELDS f1 f2 ...] 语句传递进来的选择字段, SELECT_FIELDS 是 LDB 数据库程序自动生成的,其类型如下(不必在 LDB 程序中加入下面代码行,直接就可以使用 SELECT_FIELDS 内表, 另外在相连的报表程序中也可以使用,这与 DYN_SEL 不同 ):
TYPE-POOLS RSFS . DATA SELECT_FIELDS TYPE RSFS_FIELDS .
RSDS_FIELDS 中的 FIELDS 里存储的就是 GET…FIELDS… 语句传递过来的用户指定的查询字段, FIELDS 内表可以直接使用在 SELECT… 从句中。
现假设有名为 ZHK 的 LDB , SCARR 为该 LDB 的根节点,且仅有 SPFLI 一个子节点。 LDB 选择屏幕 Include 文件 DBZHKSEL 内容如下:
SELECT-OPTIONS S_CARRID FOR SCARR - CARRID . SELECT-OPTIONS S_CONNID FOR SPFLI - CONNID . " 需要先开始动态选择字段功能 SELECTION-SCREEN FIELD SELECTION FOR TABLE SPFLI .
LDB 数据库程序 SAPDBZHK 中, PUT_SCARR 过程中使用 dynamic selection 的过程如下:
FORM PUT_SPFLI . STATICS : FIELDLISTS TYPE RSFS_TAB_FIELDS , FLAG_READ . " 确保 SELECT_FIELDS 只读取一次 IF FLAG_READ = SPACE . FIELDLISTS - TABLENAME = 'SPFLI' . " 读取相应表的动态选择字段 READ TABLE SELECT_FIELDS WITH KEY FIELDLISTS - TABLENAME INTO FIELDLISTS . FLAG_READ = 'X' . ENDIF . SELECT ( FIELDLISTS- FIELDS ) " 动态选择字段 INTO CORRESPONDING FIELDS OF SPFLI FROM SPFLI WHERE CARRID = SCARR - CARRID AND CONNID IN S_CONNID . PUT SPFLI . ENDSELECT . ENDFORM.
在相应的可执行报表程序里,相应的代码可能会是这样的:
TABLES SPFLI . GET SPFLI FIELDS CITYFROM CITYTO . ...
GET 语句中的 FIELDS 选项指定了除主键外需要查询来的字段,主键不管是否选择都会被从数据库表中读取出来 ,可以由下面报表程序中的代码来证明 :
DATA : ITAB LIKE SELECT_FIELDS , ITAB_L LIKE LINE OF ITAB , JTAB LIKE ITAB_L - FIELDS , JTAB_L LIKE LINE OF JTAB . START-OF-SELECTION . ITAB = SELECT_FIELDS . " 在报表程序中也可以直接使用 LDB 程序中的全局变量! LOOP AT ITAB INTO ITAB_L . IF ITAB_L - TABLENAME = 'SPFLI' . JTAB = ITAB_L - FIELDS . LOOP AT JTAB INTO JTAB_L . WRITE / JTAB_L . ENDLOOP . ENDIF . ENDLOOP .
如果报表程序中的 GET 语句是这样的: GET SPFLI FIELDS CITYFROM CITYTO. ,则输入结果为:
CITYTO
CITYFROM
MANDT
CARRID
CONNID
可以从输出结果看出,主键 MANDT 、 CARRID 、 CONNID 会自动的加入到 SELECT_FIELDS 内表中,一并会从数据库中读取出来
6.4. 数据库程序中重要 FORM
? FORM INIT
在选择屏幕处理前仅调用一次(在 PBO 之前调用)
? FORM PBO
在选择屏幕每次显示之前调用,即 LDB 选择屏幕的 PBO 事件块
? FORM PAI
用户在选择屏幕上输入之后调用,即 LDB 选择屏幕的 PAI 事件块(之后?)。
该 FORM 带两个接口参数 FNAME and MARK 将会传到 subroutine 中。 FNAME 存储了选择屏幕中用户所选择 SELECT-OPTION 与 PARAMETERS 的 屏幕字段名 , MARK 标示了用户选择的是单值还是多值条件: MARK = SPACE 意味着用户输入了一个简单单值或者范围取值, MARK = '*' 意味着用户在 Multiple Selection screen 的输入 ( 即多个条件值 ) ; FNAME = '*' 和 MARK = 'ANY' , 表示所有的屏幕参数都已检验完成,即可以对屏幕整体参数做一个整体的检测了(这里的意思应该就是相当于 AT SELECTION-SCREEN )。
? FORM PUT_
最顶层节点 所对应的 FORM PUT_ 会在 START-OF-SELECTION 事件结束后自动 被调用,而其他下层节点所对应的 FORM 会由它的上层节点所对应的 FORM 中的 PUT 语句来触发(在上层节点所对应的可执行程序中的相应 GET 事件块执行之后触发)
PUT .
此语句用是 PUT_ 子过程中的特定语句,它是与 PUT_ Form 一起使用的,通常是放在循环处理数据循环过程中。 PUT 语句根据 LDB 的结构指引了报表程序的逻辑。该语句会触发相应的报表程序的 GET 事件。当 GET 事件块执行完后,如果有下层节点,则还会调用下层节点所对应的 FORM PUT_ 。
PUT 语句是该 Form ( PUT_ )中最主要的语句:此语句仅仅只能在 LDB 数据库程序的 Form 中使用。
当 PUT_ 调用结束后,报表程序中相应 GET LATE 事件块也会自动调用。
首先,根节点所对应的 PUT_ 会自动执行,此 Form 中的 PUT 会以下面的先后顺序来执行程序:
1. 如果 LDB 数据库程序包含了 AUTHORITY_CHECK_语句,则 PUT 语句的第一件事就是调用它
2. 然后, PUT 语句会触发报表程序相应的 GET 事件
3. 再后, PUT 语句会去调用 LDB 程序中下一节点的 PUT_ 子过程(此过程又会按照这里的三步来运行),直到下层所有子孙节点 PUT_ 过程处理完成(深度遍历 ),才会回到最上一层节点的 PUT 语句
4. 当控制权从下层节点的 PUT_ 返回时, PUT 语句还会触发当前节点的 GET LATE 报表事件
GET 事件块会在 LDB 程序从数据库表中读取到一行数据时被触发 。
6.5. LDB 选择屏幕:静 ( 动 ) 态选择屏幕、动态选择视图
在报表选择屏幕上是否显示 LDB 的普通选择条件 (即静态的,与动态选择条件相对应),则要看 报表程序中是否使用了对应的 TABLE 语句 ,如果有,则与 节点相关的所有 LDB 选择条件都会显示在报表程序的选择屏幕上,如果没有此语句,则与 节点相关的所有 LDB 选择条件都会不会显示( 但如果某个节点没有在 TABLE 语句中进行定义,但其子节点,或子孙节点在 TABLE 语句中进行了定义,则这些子孙节点所对应的父节点所对应 LDB 屏幕选择条件还是会嵌入到报表选择屏幕中 )。有几种情况:
l 如果报表程序中只有根节点的定义语句:
则报表程序的选择屏幕只会将 spfli 节点相关的普通选择条件内嵌进来,子孙节点不会显示出来:
l 如果报表程序只有子孙节点定义语句:
则报表程序的选择屏幕中,会将 sbook 的父节点 SFLIGHT 以及爷节点 SPFLI 相关的 LDB 静态选择内嵌进来 :
如果 LDB 的选择屏幕在没有创建选择视图 的情况下: 动态选择 是否显示在报表程序的选择屏幕中,首先 要看报表程序中是否使用了 TABLE 对需要动态显示的节点进行了定义(如果这个节点是上层节点,则此节点为本身也可以不在 TABLE 语句定义,而是对其子孙节点进行定义也是可以的),再者 ,还需要相应的 节点在 LDB 屏幕选择 Include 程序中的 SELECTION-SCREEN DYNAMIC SELECTIONS FOR TABLE 语句中进行定义,注:要显示,则对应节点一定要在此语句中定义过,而不是像报表程序中的节点只对其子孙节点进行定义即可,而是谁需要动态显示,则谁就得要在动态定义语句中进行定义,如下面在 LDB 选择屏幕 Include 程序中只对 SBOOK 的上层节点 SPFLI,SFLIGHT 进行了定义,并没有对 SBOOK 进行定义:
而在报表程序中只能 SBOOK 进行了定义:
但最后在报表动态选择屏幕中,只有 SPFLI,SFLIGHT 两个表的条件(需使用 SELECTION-SCREEN DYNAMIC SELECTIONS 语句对 SPFLI,SFLIGHT 节点进行定义),而 SBOOK 并没有:
在没有创建选择视图的情况下,以表名来建小分类,且动态条件字段为整个表的所有字段
如果 LDB 的选择屏幕在有选择视图 的情况下:只要存在选择视图,则只显示选择视图里被选择的字段,其他任何字段一概不显示。下面只将 SPFLI-CARRID 与 SFLIGHT-CONNID 两个字段已分别纳入到了 01 与 02 分组中,而 SBOOK 节点中没有字段纳入:
报表程序里将 SBOOK 节点定义在了 TABLES 语句中,所以,从 SBOOK 这一级开始(包括)向上所有节点的所对应的字段,如果纳入了选择视图中,则选择屏幕显示如下:
你可能感兴趣的:(数据库)
Google earth studio 简介
陟彼高冈yu
旅游
GoogleEarthStudio是一个基于Web的动画工具,专为创作使用GoogleEarth数据的动画和视频而设计。它利用了GoogleEarth强大的三维地图和卫星影像数据库,使用户能够轻松地创建逼真的地球动画、航拍视频和动态地图可视化。网址为https://www.google.com/earth/studio/。GoogleEarthStudio是一个基于Web的动画工具,专为创作使用G
关于提高复杂业务逻辑代码可读性的思考
编程经验分享
开发经验 java 数据库 开发语言
目录前言需求场景常规写法拆分方法领域对象总结前言实际工作中大部分时间都是在写业务逻辑,一般都是三层架构,表示层(Controller)接收客户端请求,并对入参做检验,业务逻辑层(Service)负责处理业务逻辑,一般开发都是在这一层中写具体的业务逻辑。数据访问层(Dao)是直接和数据库交互的,用于查数据给业务逻辑层,或者是将业务逻辑层处理后的数据写入数据库。简单的增删改查接口不用多说,基本上写好一
SQL Server_查询某一数据库中的所有表的内容
qq_42772833
SQL Server 数据库 sqlserver
1.查看所有表的表名要列出CrabFarmDB数据库中的所有表(名),可以使用以下SQL语句:USECrabFarmDB;--切换到目标数据库GOSELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLESWHERETABLE_TYPE='BASETABLE';对这段SQL脚本的解释:SELECTTABLE_NAME:这个语句的作用是从查询结果中选择TABLE_NAM
深入理解 MultiQueryRetriever:提升向量数据库检索效果的强大工具
nseejrukjhad
数据库 python
深入理解MultiQueryRetriever:提升向量数据库检索效果的强大工具引言在人工智能和自然语言处理领域,高效准确的信息检索一直是一个关键挑战。传统的基于距离的向量数据库检索方法虽然广泛应用,但仍存在一些局限性。本文将介绍一种创新的解决方案:MultiQueryRetriever,它通过自动生成多个查询视角来增强检索效果,提高结果的相关性和多样性。MultiQueryRetriever的工
MongoDB Oplog 窗口
喝醉酒的小白
MongoDB 运维
在MongoDB中,oplog(操作日志)是一个特殊的日志系统,用于记录对数据库的所有写操作。oplog允许副本集成员(通常是从节点)应用主节点上已经执行的操作,从而保持数据的一致性。它是MongoDB副本集实现数据复制的基础。MongoDBOplog窗口oplog窗口是指在MongoDB副本集中,从节点可以用来同步数据的时间范围。这个窗口通常由以下因素决定:Oplog大小:oplog的大小是有限
python os 环境变量
CV矿工
python 开发语言 numpy
环境变量:环境变量是程序和操作系统之间的通信方式。有些字符不宜明文写进代码里,比如数据库密码,个人账户密码,如果写进自己本机的环境变量里,程序用的时候通过os.environ.get()取出来就行了。os.environ是一个环境变量的字典。环境变量的相关操作importos"""设置/修改环境变量:os.environ[‘环境变量名称’]=‘环境变量值’#其中key和value均为string类
【PG】常见数据库、表属性设置
江无羡
数据库
PG的常见属性配置方法数据库复制、备份相关表的复制标识单表操作批量表操作链接数据库复制、备份相关表的复制标识单表操作通过ALTER语句单独更改一张表的复制标识。ALTERTABLE[tablename]REPLICAIDENTITYFULL;批量表操作通过代码块的方式,对某个schema中的所有表一起更新其复制标识。SELECTtablename,CASErelreplidentWHEN'd'TH
nosql数据库技术与应用知识点
皆过客,揽星河
NoSQL nosql 数据库 大数据 数据分析 数据结构 非关系型数据库
Nosql知识回顾大数据处理流程数据采集(flume、爬虫、传感器)数据存储(本门课程NoSQL所处的阶段)Hdfs、MongoDB、HBase等数据清洗(入仓)Hive等数据处理、分析(Spark、Flink等)数据可视化数据挖掘、机器学习应用(Python、SparkMLlib等)大数据时代存储的挑战(三高)高并发(同一时间很多人访问)高扩展(要求随时根据需求扩展存储)高效率(要求读写速度快)
insert into select 主键自增_mybatis拦截器实现主键自动生成
weixin_39521651
insert into select 主键自增 mybatis delete返回值 mybatis insert返回主键 mybatis insert返回对象 mybatis plus insert返回主键 mybatis plus 插入生成id
前言前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键。于是我就问他,那你们数据库表设置主键自动递增不就得了。他的回答是他们项目目前的id都是采用雪花算法来生成,因此为了项目稳定性,不会切换id的生成方式。朋友问我有没有什么实现思路,他们公司的orm框架是mybatis,我就建议他说,不然让你老大把mybatis切换成mybatis-plus。mybat
关于Mysql 中 Row size too large (> 8126) 错误的解决和理解
秋刀prince
mysql mysql 数据库
提示:啰嗦一嘴,数据库的任何操作和验证前,一定要记得先备份!!!不会有错;文章目录问题发现一、问题导致的可能原因1、页大小2、行格式2.1compact格式2.2Redundant格式2.3Dynamic格式2.4Compressed格式3、BLOB和TEXT列二、解决办法1、修改页大小(不推荐)2、修改行格式3、修改数据类型为BLOB和TEXT列4、其他优化方式(可以参考使用)4.1合理设置数据
Java爬虫框架(一)--架构设计
狼图腾-狼之传说
java 框架 java 任务 html解析器 存储 电子商务
一、架构图那里搜网络爬虫框架主要针对电子商务网站进行数据爬取,分析,存储,索引。爬虫:爬虫负责爬取,解析,处理电子商务网站的网页的内容数据库:存储商品信息索引:商品的全文搜索索引Task队列:需要爬取的网页列表Visited表:已经爬取过的网页列表爬虫监控平台:web平台可以启动,停止爬虫,管理爬虫,task队列,visited表。二、爬虫1.流程1)Scheduler启动爬虫器,TaskMast
MongoDB知识概括
GeorgeLin98
持久层 mongodb
MongoDB知识概括MongoDB相关概念单机部署基本常用命令索引-IndexSpirngDataMongoDB集成副本集分片集群安全认证MongoDB相关概念业务应用场景:传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。解释:“三高”需求:①Highperformance-对数据库高并发读写的需求。②HugeStorage-对海量数
Mongodb Error: queryTxt ETIMEOUT xxxx.wwwdz.mongodb.net
佛一脚
error react mongodb 数据库
背景每天都能遇到奇怪的问题,做个记录,以便有缘人能得到帮助!换了一台电脑开发nextjs程序。需要连接mongodb数据,对数据进行增删改查。上一台电脑好好的程序,新电脑死活连不上mongodb数据库。同一套代码,没任何修改,搞得我怀疑人生了,打开浏览器进入mongodb官网毫无问题,也能进入线上系统查看数据,网络应该是没问题。于是我尝试了一下手机热点,这次代码能正常跑起来,连接数据库了!!!是不
入门MySQL——查询语法练习
K_un
前言:前面几篇文章为大家介绍了DML以及DDL语句的使用方法,本篇文章将主要讲述常用的查询语法。其实MySQL官网给出了多个示例数据库供大家实用查询,下面我们以最常用的员工示例数据库为准,详细介绍各自常用的查询语法。1.员工示例数据库导入官方文档员工示例数据库介绍及下载链接:https://dev.mysql.com/doc/employee/en/employees-installation.h
博客网站制作教程
2401_85194651
java maven
首先就是技术框架:后端:Java+SpringBoot数据库:MySQL前端:Vue.js数据库连接:JPA(JavaPersistenceAPI)1.项目结构blog-app/├──backend/│├──src/main/java/com/example/blogapp/││├──BlogApplication.java││├──config/│││└──DatabaseConfig.java
ubuntu安装wordpress
lissettecarlr
1安装nginx网上安装方式很多,这就就直接用apt-get了apt-getinstallnginx不用启动啥,然后直接在浏览器里面输入IP:80就能看到nginx的主页了。如果修改了一些配置可以使用下列命令重启一下systemctlrestartnginx.service2安装mysql输入安装前也可以更新一下软件源,在安装过程中将会让你输入数据库的密码。sudoapt-getinstallmy
深入浅出 -- 系统架构之负载均衡Nginx的性能优化
xiaoli8748_软件开发
系统架构 系统架构 负载均衡 nginx
一、Nginx性能优化到这里文章的篇幅较长了,最后再来聊一下关于Nginx的性能优化,主要就简单说说收益最高的几个优化项,在这块就不再展开叙述了,毕竟影响性能都有多方面原因导致的,比如网络、服务器硬件、操作系统、后端服务、程序自身、数据库服务等,对于性能调优比较感兴趣的可以参考之前《JVM性能调优》中的调优思想。优化一:打开长连接配置通常Nginx作为代理服务,负责分发客户端的请求,那么建议开启H
【RabbitMQ 项目】服务端:数据管理模块之绑定管理
月夜星辉雪
rabbitmq 分布式
文章目录一.编写思路二.代码实践一.编写思路定义绑定信息类交换机名称队列名称绑定关键字:交换机的路由交换算法中会用到没有是否持久化的标志,因为绑定是否持久化取决于交换机和队列是否持久化,只有它们都持久化时绑定才需要持久化。绑定就好像一根绳子,两端连接着交换机和队列,当一方不存在,它就没有存在的必要了定义绑定持久化类构造函数:如果数据库文件不存在则创建,打开数据库,创建binding_table插入
计算机毕业设计PHP仓储综合管理系统(源码+程序+VUE+lw+部署)
java毕设程序源码王哥
php 课程设计 vue.js
该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:phpStudy+Vscode+Mysql5.7+HBuilderX+Navicat11+Vue+Express。项目技术:原生PHP++Vue等等组成,B/S模式+Vscode管理+前后端分离等等。环境需要1.运行环境:最好是小皮phpstudy最新版,我们在这个版本上开发的。其他版本理论上也可以。2.开发
3.增删改查--连接查询
问女何所忆
关系型数据库的一个特点就是,多张表之间存在关系,以致于我们可以连接多张表进行查询操作,所以连接查询会是关系型数据库中最常见的操作。连接查询主要分为三种,交叉连接、内连接和外连接,我们一个个说。1、交叉连接交叉连接其实连接查询的第一个阶段,它简单表现为两张表的笛卡尔积形式,具体例子:如果你没学过数学中的笛卡尔积概念,你可以这样简单的理解这里的交叉连接:两张表的交叉连接就是一个连接合并的过程,T1表中
docker from指令的含义_多个FROM-含义
weixin_39722188
docker from指令的含义
小编典典什么是基本图片?一组文件,加上EXPOSE端口ENTRYPOINT和CMD。您可以添加文件并基于该基础图像构建新图像,Dockerfile并以FROM指令开头:后面提到的图像FROM是新图像的“基础图像”。这是否意味着如果我neo4j/neo4j在FROM指令中声明,则在运行映像时,neo数据库将自动运行并且可在端口7474的容器中使用?仅当您不覆盖CMD和时ENTRYPOINT。但是图像
Redis:缓存击穿
我的程序快快跑啊
缓存 redis java
缓存击穿(热点key):部分key(被高并发访问且缓存重建业务复杂的)失效,无数请求会直接到数据库,造成巨大压力1.互斥锁:可以保证强一致性线程一:未命中之后,获取互斥锁,再查询数据库重建缓存,写入缓存,释放锁线程二:查询未命中,未获得锁(已由线程一获得),等待一会,缓存命中互斥锁实现方式:redis中setnxkeyvalue:改变对应key的value,仅当value不存在时执行,以此来实现互
mysql学习教程,从入门到精通,TOP 和MySQL LIMIT 子句(15)
知识分享小能手
大数据 数据库 MySQL mysql 学习 oracle 数据库 开发语言 adb 大数据
1、TOP和MySQLLIMIT子句内容在SQL中,不同的数据库系统对于限制查询结果的数量有不同的实现方式。TOP关键字主要用于SQLServer和Access数据库中,而LIMIT子句则主要用于MySQL、PostgreSQL(通过LIMIT/OFFSET语法)、SQLite等数据库中。下面将分别详细介绍这两个功能的语法、语句以及案例。1.1、TOP子句(SQLServer和Access)1.1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
†徐先森®
Oracle数据库 Web相关 错误集
createtablestudents(idintunsignedprimarykeyauto_increment,namevarchar(50)notnull,ageintunsigned,highdecimal(3,2),genderenum('男','女','中性','保密','妖')default'保密',cls_idintunsigned);在对数据库插入如上带有中文带有默认值的字段的时
Redis 有哪些危险命令?如何防范?
花小疯
redis 缓存 数据库 危险命令 大数据
Redis有哪些危险命令?Redis的危险命令主要有以下几个:1.keys客户端可查询出所有存在的键。2.flushdb删除Redis中当前所在数据库中的所有记录,并且此命令从不会执行失败。3.flushall删除Redis中所有数据库中的所有记录,不止是当前所在数据库,并且此命令从不会执行失败。4.config客户端可修改Redis配置。怎么禁用和重命名危险命令?看下redis.conf默认配置
【Golang】 Golang 的 GORM 库中的 Rows 函数
不爱洗脚的小滕
golang 开发语言 后端
文章目录前言一、Rows函数解释二、代码实现三、总结前言在使用Go语言进行数据库操作时,GORM(GoObject-RelationalMapping)库是一个常用的工具。它提供了一种简洁和强大的方式来处理数据库操作。本文将介绍GORM库中的Rows函数,这是一个用于执行原生SQL查询并返回结果的函数。一、Rows函数解释在GORM库中,Rows函数用于执行原生SQL查询并返回*sql.Rows结
接口测试如何设计测试用例
李蕴Ronnie
接口测试用例设计方式针对每个必填参数,都设计一条参数为空的测试用例必填参数不存在传的参数值在数据库中不存在添加数据接口,传入已有的数据重复添加编辑数据接口,各个字段分别编辑,合并编辑参数数据类型限制,针对每个参数设计一条参数值类型不符合的逆向用例参数自身取值范围,针对所有参数,设计一条每个参数值在取值范围内最大值的正向测试用例是否满足前提条件(token、headers),几个前提条件几条用例针对
Hadoop架构
henan程序媛
hadoop 大数据 分布式
一、案列分析1.1案例概述现在已经进入了大数据(BigData)时代,数以万计用户的互联网服务时时刻刻都在产生大量的交互,要处理的数据量实在是太大了,以传统的数据库技术等其他手段根本无法应对数据处理的实时性、有效性的需求。HDFS顺应时代出现,在解决大数据存储和计算方面有很多的优势。1.2案列前置知识点1.什么是大数据大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的大量数据集合,
非关系型数据库
天秤-white
nosql
一、为什么要用Nosql1.单机MySQL的时代。一个基本的网站访问量一般不会太大,单个数据库完全足够。那时候更多使用的静态网页html,服务器根本没有太大压力。这时候网站的瓶颈是什么?-数据量如果太大,一个机器放不下。-数据量太大需要建立数据的索引(B+Tree),一个服务器内存放不下。-访问量读写混合,一个服务器承受不了。2.memcached缓存+MySQL+垂直拆分(读写分离)。网站80%
六、全局锁和表锁:给表加个字段怎么有这么多阻碍
nieniemin
数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。6.1全局锁全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flushtableswithreadlock(FTWRL)。当你需要让整个库处于
Java实现的基于模板的网页结构化信息精准抽取组件:HtmlExtractor
yangshangchuan
信息抽取 HtmlExtractor 精准抽取 信息采集
HtmlExtractor是一个Java实现的基于模板的网页结构化信息精准抽取组件,本身并不包含爬虫功能,但可被爬虫或其他程序调用以便更精准地对网页结构化信息进行抽取。
HtmlExtractor是为大规模分布式环境设计的,采用主从架构,主节点负责维护抽取规则,从节点向主节点请求抽取规则,当抽取规则发生变化,主节点主动通知从节点,从而能实现抽取规则变化之后的实时动态生效。
如
java编程思想 -- 多态
百合不是茶
java 多态详解
一: 向上转型和向下转型
面向对象中的转型只会发生在有继承关系的子类和父类中(接口的实现也包括在这里)。父类:人 子类:男人向上转型: Person p = new Man() ; //向上转型不需要强制类型转化向下转型: Man man =
[自动数据处理]稳扎稳打,逐步形成自有ADP系统体系
comsci
dp
对于国内的IT行业来讲,虽然我们已经有了"两弹一星",在局部领域形成了自己独有的技术特征,并初步摆脱了国外的控制...但是前面的路还很长....
首先是我们的自动数据处理系统还无法处理很多高级工程...中等规模的拓扑分析系统也没有完成,更加复杂的
storm 自定义 日志文件
商人shang
storm cluster logback
Storm中的日志级级别默认为INFO,并且,日志文件是根据worker号来进行区分的,这样,同一个log文件中的信息不一定是一个业务的,这样就会有以下两个需求出现:
1. 想要进行一些调试信息的输出
2. 调试信息或者业务日志信息想要输出到一些固定的文件中
不要怕,不要烦恼,其实Storm已经提供了这样的支持,可以通过自定义logback 下的 cluster.xml 来输
Extjs3 SpringMVC使用 @RequestBody 标签问题记录
21jhf
springMVC使用 @RequestBody(required = false) UserVO userInfo
传递json对象数据,往往会出现http 415,400,500等错误,总结一下需要使用ajax提交json数据才行,ajax提交使用proxy,参数为jsonData,不能为params;另外,需要设置Content-type属性为json,代码如下:
(由于使用了父类aaa
一些排错方法
文强chu
方法
1、java.lang.IllegalStateException: Class invariant violation
at org.apache.log4j.LogManager.getLoggerRepository(LogManager.java:199)at org.apache.log4j.LogManager.getLogger(LogManager.java:228)
at o
Swing中文件恢复我觉得很难
小桔子
swing
我那个草了!老大怎么回事,怎么做项目评估的?只会说相信你可以做的,试一下,有的是时间!
用java开发一个图文处理工具,类似word,任意位置插入、拖动、删除图片以及文本等。文本框、流程图等,数据保存数据库,其余可保存pdf格式。ok,姐姐千辛万苦,
php 文件操作
aichenglong
PHP 读取文件 写入文件
1 写入文件
@$fp=fopen("$DOCUMENT_ROOT/order.txt", "ab");
if(!$fp){
echo "open file error" ;
exit;
}
$outputstring="date:"." \t tire:".$tire."
MySQL的btree索引和hash索引的区别
AILIKES
数据结构 mysql 算法
Hash 索引结构的特殊性,其 检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。
可能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢
JAVA的抽象--- 接口 --实现
百合不是茶
抽象 接口 实现接口
//抽象 类 ,方法
//定义一个公共抽象的类 ,并在类中定义一个抽象的方法体
抽象的定义使用abstract
abstract class A 定义一个抽象类 例如:
//定义一个基类
public abstract class A{
//抽象类不能用来实例化,只能用来继承
//
JS变量作用域实例
bijian1013
作用域
<script>
var scope='hello';
function a(){
console.log(scope); //undefined
var scope='world';
console.log(scope); //world
console.log(b);
TDD实践(二)
bijian1013
java TDD
实践题目:分解质因数
Step1:
单元测试:
package com.bijian.study.factor.test;
import java.util.Arrays;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import com.bijian.
[MongoDB学习笔记一]MongoDB主从复制
bit1129
mongodb
MongoDB称为分布式数据库,主要原因是1.基于副本集的数据备份, 2.基于切片的数据扩容。副本集解决数据的读写性能问题,切片解决了MongoDB的数据扩容问题。
事实上,MongoDB提供了主从复制和副本复制两种备份方式,在MongoDB的主从复制和副本复制集群环境中,只有一台作为主服务器,另外一台或者多台服务器作为从服务器。 本文介绍MongoDB的主从复制模式,需要指明
【HBase五】Java API操作HBase
bit1129
hbase
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.ha
python调用zabbix api接口实时展示数据
ronin47
zabbix api接口来进行展示。经过思考之后,计划获取如下内容: 1、 获得认证密钥 2、 获取zabbix所有的主机组 3、 获取单个组下的所有主机 4、 获取某个主机下的所有监控项  
jsp取得绝对路径
byalias
绝对路径
在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常用的做法如下:
一、使用${pageContext.request.contextPath}
代码” ${pageContext.request.contextPath}”的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。
Java定时任务调度:用ExecutorService取代Timer
bylijinnan
java
《Java并发编程实战》一书提到的用ExecutorService取代Java Timer有几个理由,我认为其中最重要的理由是:
如果TimerTask抛出未检查的异常,Timer将会产生无法预料的行为。Timer线程并不捕获异常,所以 TimerTask抛出的未检查的异常会终止timer线程。这种情况下,Timer也不会再重新恢复线程的执行了;它错误的认为整个Timer都被取消了。此时,已经被
SQL 优化原则
chicony
sql
一、问题的提出
在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统
java 线程弹球小游戏
CrazyMizzz
java 游戏
最近java学到线程,于是做了一个线程弹球的小游戏,不过还没完善
这里是提纲
1.线程弹球游戏实现
1.实现界面需要使用哪些API类
JFrame
JPanel
JButton
FlowLayout
Graphics2D
Thread
Color
ActionListener
ActionEvent
MouseListener
Mouse
hadoop jps出现process information unavailable提示解决办法
daizj
hadoop jps
hadoop jps出现process information unavailable提示解决办法
jps时出现如下信息:
3019 -- process information unavailable3053 -- process information unavailable2985 -- process information unavailable2917 --
PHP图片水印缩放类实现
dcj3sjt126com
PHP
<?php
class Image{
private $path;
function __construct($path='./'){
$this->path=rtrim($path,'/').'/';
}
//水印函数,参数:背景图,水印图,位置,前缀,TMD透明度
public function water($b,$l,$pos
IOS控件学习:UILabel常用属性与用法
dcj3sjt126com
ios UILabel
参考网站:
http://shijue.me/show_text/521c396a8ddf876566000007
http://www.tuicool.com/articles/zquENb
http://blog.csdn.net/a451493485/article/details/9454695
http://wiki.eoe.cn/page/iOS_pptl_artile_281
完全手动建立maven骨架
eksliang
java eclipse Web
建一个 JAVA 项目 :
mvn archetype:create
-DgroupId=com.demo
-DartifactId=App
[-Dversion=0.0.1-SNAPSHOT]
[-Dpackaging=jar]
建一个 web 项目 :
mvn archetype:create
-DgroupId=com.demo
-DartifactId=web-a
配置清单
gengzg
配置
1、修改grub启动的内核版本
vi /boot/grub/grub.conf
将default 0改为1
拷贝mt7601Usta.ko到/lib文件夹
拷贝RT2870STA.dat到 /etc/Wireless/RT2870STA/文件夹
拷贝wifiscan到bin文件夹,chmod 775 /bin/wifiscan
拷贝wifiget.sh到bin文件夹,chm
Windows端口被占用处理方法
huqiji
windows
以下文章主要以80端口号为例,如果想知道其他的端口号也可以使用该方法..........................1、在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等. 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入&
开源ckplayer 网页播放器, 跨平台(html5, mobile),flv, f4v, mp4, rtmp协议. webm, ogg, m3u8 !
天梯梦
mobile
CKplayer,其全称为超酷flv播放器,它是一款用于网页上播放视频的软件,支持的格式有:http协议上的flv,f4v,mp4格式,同时支持rtmp视频流格 式播放,此播放器的特点在于用户可以自己定义播放器的风格,诸如播放/暂停按钮,静音按钮,全屏按钮都是以外部图片接口形式调用,用户根据自己的需要制作 出播放器风格所需要使用的各个按钮图片然后替换掉原始风格里相应的图片就可以制作出自己的风格了,
简单工厂设计模式
hm4123660
java 工厂设计模式 简单工厂模式
简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式。是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
maven笔记
zhb8015
maven
跳过测试阶段:
mvn package -DskipTests
临时性跳过测试代码的编译:
mvn package -Dmaven.test.skip=true
maven.test.skip同时控制maven-compiler-plugin和maven-surefire-plugin两个插件的行为,即跳过编译,又跳过测试。
指定测试类
mvn test
非mapreduce生成Hfile,然后导入hbase当中
Stark_Summer
map hbase reduce Hfile path实例
最近一个群友的boss让研究hbase,让hbase的入库速度达到5w+/s,这可愁死了,4台个人电脑组成的集群,多线程入库调了好久,速度也才1w左右,都没有达到理想的那种速度,然后就想到了这种方式,但是网上多是用mapreduce来实现入库,而现在的需求是实时入库,不生成文件了,所以就只能自己用代码实现了,但是网上查了很多资料都没有查到,最后在一个网友的指引下,看了源码,最后找到了生成Hfile
jsp web tomcat 编码问题
王新春
tomcat jsp pageEncode
今天配置jsp项目在tomcat上,windows上正常,而linux上显示乱码,最后定位原因为tomcat 的server.xml 文件的配置,添加 URIEncoding 属性:
<Connector port="8080" protocol="HTTP/1.1"
connectionTi