精华内容
下载资源
问答
  • 最新版Google V8引擎库,谷歌Chrome JavaScript引擎,VS2013 32位编译,可正式使用
  • 智能语音引擎库tts

    2009-05-22 14:57:42
    智能语音引擎库,提供更好的语音引擎,希望对大家有帮助!
  • 黑莓开源游戏引擎开发压缩包,包含gameplay依赖的第三方头文件以及Lib。
  • mysql存储引擎

    万次阅读 多人点赞 2019-07-31 19:28:44
    数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的...

    数据库存储引擎

    数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。

    因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(Table Type,即存储和操作此表的类型)。

    如创建一个InnoDB类型的表:

    CREATE TABLE `brand` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `brand_name` varchar(64) NOT NULL,
      `brand_logo` varchar(255) NOT NULL,
      `description` varchar(255) NOT NULL,
      `parent_id` int(11) NOT NULL,
      `layer` int(11) NOT NULL DEFAULT '0',
      `enabled` int(11) NOT NULL DEFAULT '0',
      `path` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `brand_name` (`brand_name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    mysql存储引擎

    MySQL给开发者提供了查询存储引擎的功能,执行以下sql即可查询到mysql中的存储引擎

    SHOW ENGINES

    我的mysql版本是5.7.22,下面是在Navicat中执行的结果

    InnoDB存储引擎

    InnoDB是事务型数据库的首选引擎,通过上图也看到了,InnoDB是目前MYSQL的默认事务型引擎,是目前最重要、使用最广泛的存储引擎。支持事务安全表(ACID),支持行锁定和外键。InnoDB主要特性有:

    1、InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合

    2、InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的

    3、InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件)。这与MyISAM表不同,比如在MyISAM表中每个表被存放在分离的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上

    4、InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键

    5、InnoDB被用在众多需要高性能的大型数据库站点上

    InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件。

    场景:由于其支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

    MyISAM存储引擎

    MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事物和外键。

    MyISAM主要特性有:

    1、大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持

    2、当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块自动完成

    3、每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16

    4、最大的键长度是1000字节,这也可以通过编译来改变,对于键长度超过250字节的情况,一个超过1024字节的键将被用上

    5、BLOB和TEXT列可以被索引,支持FULLTEXT类型的索引,而InnoDB不支持这种类型的索引

    6、NULL被允许在索引的列中,这个值占每个键的0~1个字节

    7、所有数字键值以高字节优先被存储以允许一个更高的索引压缩

    8、每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列,当INSERT和UPDATE操作的时候该列被更新,同时AUTO_INCREMENT列将被刷新。所以说,MyISAM类型表的AUTO_INCREMENT列更新比InnoDB类型的AUTO_INCREMENT更快

    9、可以把数据文件和索引文件放在不同目录

    10、每个字符列可以有不同的字符集

    11、有VARCHAR的表可以固定或动态记录长度

    12、VARCHAR和CHAR列可以多达64KB

    存储格式:

    1、静态表(默认):字段都是非变长的(每个记录都是固定长度的)。存储非常迅速、容易缓存,出现故障容易恢复;占用空间通常比动态表多。

    2、动态表:占用的空间相对较少,但是频繁的更新删除记录会产生碎片,需要定期执行optimize table或myisamchk -r命令来改善性能,而且出现故障的时候恢复比较困难。

    3、压缩表:使用myisampack工具创建,占用非常小的磁盘空间。因为每个记录是被单独压缩的,所以只有非常小的访问开支。

    静态表的数据在存储的时候会按照列的宽度定义补足空格,在返回数据给应用之前去掉这些空格。如果需要保存的内容后面本来就有空格,在返回结果的时候也会被去掉。(其实是数据类型char的行为,动态表中若有这个数据类型也同样会有这个问题)

    使用MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,扩展名之处文件类型:frm文件存储表定义、数据文件的扩展名为.MYD(MYData)、索引文件的扩展名时.MYI(MYIndex)。

    场景:如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。

    MERGE存储引擎

    MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,尽管其使用不如其它引擎突出,但是在某些情况下非常有用。说白了,Merge表就是几个相同MyISAM表的聚合器;Merge表中并没有数据,对Merge类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行操作。

    场景:对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定的时间端相关。例如:可以用12个相同的表来存储服务器日志数据,每个表用对应各个月份的名字来命名。当有必要基于所有12个日志表的数据来生成报表,这意味着需要编写并更新多表查询,以反映这些表中的信息。与其编写这些可能出现错误的查询,不如将这些表合并起来使用一条查询,之后再删除Merge表,而不影响原来的数据,删除Merge表只是删除Merge表的定义,对内部的表没有任何影响。

    MEMORY存储引擎

    MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。MEMORY主要特性有:

    1、MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度

    2、MEMORY存储引擎执行HASH和BTREE缩影

    3、可以在一个MEMORY表中有非唯一键值

    4、MEMORY表使用一个固定的记录长度格式

    5、MEMORY不支持BLOB或TEXT列

    6、MEMORY支持AUTO_INCREMENT列和对可包含NULL值的列的索引

    7、MEMORY表在所由客户端之间共享(就像其他任何非TEMPORARY表)

    8、MEMORY表内存被存储在内存中,内存是MEMORY表和服务器在查询处理时的空闲中,创建的内部表共享

    9、当不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行DELETE FROM或TRUNCATE TABLE,或者删除整个表(使用DROP TABLE)

    MEMORY存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,但也可以使用B树型索引。由于这种存储引擎所存储的数据保存在内存中,所以其保存的数据具有不稳定性,比如如果mysqld进程发生异常、重启或计算机关机等等都会造成这些数据的消失,所以这种存储引擎中的表的生命周期很短,一般只使用一次。现在mongodb、redis等NOSQL数据库愈发流行,MEMORY存储引擎的使用场景越来越少。

    场景:如果需要该数据库中一个用于查询的临时表。

    ARCHIVE存储引擎

    Archive是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能。在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本中就开始支持索引了。Archive拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。

    场景:由于高压缩和快速插入的特点Archive非常适合作为日志表的存储引擎,但是前提是不经常对该表进行查询操作。

    CSV存储引擎

    使用该引擎的MySQL数据库表会在MySQL安装目录data文件夹中的和该表所在数据库名相同的目录中生成一个.CSV文件(所以,它可以将CSV类型的文件当做表进行处理),这种文件是一种普通文本文件,每个数据行占用一个文本行。该种类型的存储引擎不支持索引,即使用该种类型的表没有主键列;另外也不允许表中的字段为null。csv的编码转换需要格外注意。

    场景:这种引擎支持从数据库中拷入/拷出CSV文件。如果从电子表格软件输出一个CSV文件,将其存放在MySQL服务器的数据目录中,服务器就能够马上读取相关的CSV文件。同样,如果写数据库到一个CSV表,外部程序也可以立刻读取它。在实现某种类型的日志记录时,CSV表作为一种数据交换格式,特别有用。

    BLACKHOLE存储引擎(黑洞引擎)

    该存储引擎支持事务,而且支持mvcc的行级锁,写入这种引擎表中的任何数据都会消失,主要用于做日志记录或同步归档的中继存储,这个存储引擎除非有特别目的,否则不适合使用。

    场景:如果配置一主多从的话,多个从服务器会在主服务器上分别开启自己相对应的线程,执行binlogdump命令而且多个此类进程并不是共享的。为了避免因多个从服务器同时请求同样的事件而导致主机资源耗尽,可以单独建立一个伪的从服务器或者叫分发服务器。

    PERFORMANCE_SCHEMA存储引擎

    该引擎主要用于收集数据库服务器性能参数。这种引擎提供以下功能:提供进程等待的详细信息,包括锁、互斥变量、文件信息;保存历史的事件汇总信息,为提供MySQL服务器性能做出详细的判断;对于新增和删除监控事件点都非常容易,并可以随意改变mysql服务器的监控周期,例如(CYCLE、MICROSECOND)。 MySQL用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。

    场景: DBA能够较明细得了解性能降低可能是由于哪些瓶颈。

    Federated存储引擎

    该存储引擎可以不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。这种存储引擎非常适合数据库分布式应用。

    Federated存储引擎可以使你在本地数据库中访问远程数据库中的数据,针对federated存储引擎表的查询会被发送到远程数据库的表上执行,本地是不存储任何数据的。

    缺点:

    1.对本地虚拟表的结构修改,并不会修改远程表的结构

    2.truncate 命令,会清除远程表数据

    3. drop命令只会删除虚拟表,并不会删除远程表

    4.不支持 alter table 命令

    5. select count(*), select * from limit M, N 等语句执行效率非常低,数据量较大时存在很严重的问题,但是按主键或索引列查询,则很快,如以下查询就非常慢(假设 id 为主索引)

    select id from db.tablea where id >100 limit 10 ;

    而以下查询就很快:

    select id from db.tablea where id >100 and id<150

    6.  如果虚拟虚拟表中字段未建立索引,而实体表中为此字段建立了索引,此种情况下,性能也相当差。但是当给虚拟表建立索引后,性能恢复正常。

    7. 类似 where name like "str%" limit 1 的查询,即使在 name 列上创建了索引,也会导致查询过慢,是因为federated引擎会将所有满足条件的记录读取到本地,再进行 limit 处理。

    场景: dblink。

    存储引擎的选择

    功 能

    MYISAM

    Memory

    InnoDB

    Archive

    存储限制

    256TB

    RAM

    64TB

    None

    支持事物

    No

    No

    Yes

    No

    支持全文索引

    Yes

    No

    No

    No

    支持数索引

    Yes

    Yes

    Yes

    No

    支持哈希索引

    No

    Yes

    No

    No

    支持数据缓存

    No

    N/A

    Yes

    No

    支持外键

    No

    No

    Yes

    No

     

    展开全文
  • MATLAB引擎方式函数

    千次阅读 2013-04-18 17:36:14
    MATLAB引擎函数是MATLAB提供引擎方式接口的一系列程序的集合,它允许用户用自己的C/C++语言或FORTRAN语言应用程序中对MATLAB进行调用,将MATLAB作为一个计算引擎使用,让其在后台运行,完成复杂的矩阵计算,简化...
    MATLAB引擎函数库是MATLAB提供引擎方式接口的一系列程序的集合,它允许用户用自己的C/C++语言或FORTRAN语言应用程序中对MATLAB进行调用,将MATLAB作为一个计算引擎使用,让其在后台运行,完成复杂的矩阵计算,简化前台用户程序设计的任务。
    
    在用户启动MATLAB引擎时,相当了启动了另外一个MATLAB进程并在后台运行。应用程序通过MATLAB引擎函数库中提供的函数完成与MATLAB引擎之间进行数据交换和命令传送的任务。MATLAB引擎函数库总共提供了13个C语言的引擎函数,它们均在头文件engine.h中予以说明,所以在使用它们时,必须对该头文件进行包含。下面简要介绍引擎库中的六个基本库函数:
    (1) engOpen 
    功能:启动MATLAB引擎。 
    语法:Engine* engOpen(const char* startcmd); 
    其中,startcmd为一字符串,用于启动MATLAB进程。在Windows中,startcmd必须为NULL。 
    (2) engClose 
    功能:退出MATLAB引擎。 
    语法:int engClose(Engine* ep); 
    其中,ep是Engine类型的指针。EngClose发出退出MATLAB命令,成功时返回0,否则返回l。 
    (3) engEvalString 
    功能:执行一个用字符串表示的MATLAB表达式。 
    语法:int engEvalString(Engine* ep, const char* string); 
    其中,string是命令字符串,该字符串必须是一个合法的MATLAB表达式。凡可在MATLAB命令窗口中执行的命令均可以字符串形式执行。
    (4) engGetArray 
    功能:从MATLAB的工作空间中拷贝一个变量。 
    语法:mxArray* engGetArray(Engine* ep, const char* name); 
    其中,name是从engine中得到的mxArray名。engGetArray从ep所指向的engine中读取使用参数name指定的mxArray结构体的内容,正确返回时其返回值为一指向新分配的mxArray结构体对象的指针,否则为NULL。 (5) engPutArray
    功能:将mxArray结构体类型变量放入MATLAB的工作空间中。 
    语法:int engPutArray(engine* ep, const mxArray* mp);
    其中,mp为mxArray结构体对象的指针。engPutArray将一个mxArray结构体类型的变量写入引擎ep。如果当前程序的工作空间中不存在指定的mxArray结构体,则函数会自动创建。若有同名的mxArray结构体存在,它将被这一新的mxArray结构体取代。 
    (6) engOutPutBuffer 
    功能:确定存放MATLAB输出结果的缓冲区域。 
    语法:int engOutputBuffer(Engine* eP,char* p,int n); 
    使用engOutputBuffer,用户可以为引擎指针ep所指向的引擎设置一个输出缓冲区,将MATLAB输出到屏幕上的内容保存在其中,其长度由参数n确定,位置由字符指针p来确定。
    VC++6.0集成环境中建立MATLAB引擎程序的方法 
    第一步,建立项目工程。启动VC++6.0集成环境,选择File下拉式菜单中的New选项,可有三种类型的应用程序创建工程选择.分别为MFC AppWizard(exe)、Win32Application和Win32conso1e Application。选择其中一种,在Project name编辑框中输入项目名,按照项目向导完成项目工程创建。
    第二步,设置编译环境。选择下拉式菜单Tools中的菜单项Options,选择其中的Directories属性页,在其中的Show directories下拉式选项框中分别选择Include Files和Library Files,在下部的编辑框中通过浏览分别添加如下路径:Include Fiels:MATLAB根目录\extern\include
    MATLAB根目录\extern\include\cpp
    Library Fiels:MATLAB根目录\extern\lib 
    MATLAB根目录\extern\include 
    第三步,设置项目连接选项。选择菜单Project中的子菜单Settings,选择其中的属性页Link,在其中的Catogery下拉式选项框中选择Input.在下部的Object Library modules编辑框中填写:libeng.lib、libmx.1ib和libmat.1ib。(具体用到什么库由你的应用决定)
    第四步,加入引擎头文件。在准备使用MATLAB引擎的类的cpp文件中,加入“#include “engine.h””语句,并且在以后建立的要使用MATLAB引擎的类中也注意加入上述语句。 
    当完成以上述四步工作后,用户就可以在VC++中对MATLAB引擎程序进行编译和调试了。
    Simulink的命令行仿真方式
    一般情况下,Simulink是类似框图图形化的仿真方法;而在通过引擎方式将Simulink同VC相结合时,仿真的每个操作是通过调用engEvalString执行一个用字符串表示的MATLAB表达式(Simulink仿真命令)来实现的。因此,要掌握Simulink&VC混合编程,首先需要掌握Simulink的命令行仿真方式:
    [t,x,y]=sim( 'modelname ') 
    利用对话框参数进行仿真,返回输出矩阵;
    [t,x,y]=sim( 'modelname ', timespan, options, ut)
    利用输入参数进行仿真,返回输出矩阵;
    [t,x,y1,y2,...yn]=sim( 'modelname ', timespan, options, ut)
    利用输入参数进行仿真,返回逐个输出;
    参数说明:
    'modelname ' 运行的模型名(不包含扩展名),必须在MATLAB的搜索路径上。
    timespan 指定仿真的时间区间,可以采取以下几种格式:
    (1)[] 空,利用模型对话框设置时间;
    (2)T_final 标量,制定终止仿真时间;
    (3)[T_start T_final] 二元向量,指定仿真时间区间;
    (4)outputTimes 任何指定输出时间记录点的向量。
    options MATLAB特定的一种数据结构,具有最高优先权,可以覆盖模型参数对话框中的设置。
    ut 赋给仿真对象数入口模块的量,具有最高优先设置,它是形为[t,u1,u2...]的数值矩阵,每个为时间序列或输入序列。
    Simulink与VC++6.0接口中的几点问题
    根据自己在将Simulink与VC++6.0相结合过程中的经验,在实际运作过程中,需要注意以下几点问题:
    Solver的选择
    仿真要涉及常微分方程组的数值积分,为适应计算的多样性,Simulink提供了多种求解器。因此在解决具体的问题时,应当选择合适的求解器,并且设定合适的参数,以得到精确且迅速的仿真结果。比如:
    ode45 即Nonstiff微分方程式,应用Runge-Kutta解法的中阶解法;应用最广的ode23 即Nonstiff微分方程式,应用Runge-Kutta解法之较低阶的求解方式,误差会比ode45多一点,但执行的效率快 ;ode113 即Nonstiff微分方程式,应用Adams-Bashforth-Moulton解法; ode15s 即stiff微分方程式之变阶数求解方式,是一种数值差分法;ode23s 即stiff微分方程式之低阶数求解方式,应用修正的Rosenbrock二阶解法;ode23t 即stiff微分方程式与dae三角形法整合求解方式 ode23tb 即stiff微分方程式之低阶数求解方式。
    对于ode45,通常适用于连续状态模型,而对于刚性(stiff)系统,则需要采用如ode23s的刚性求解器。对于我们的可控整流电路故障模型,由于采用短路器模拟开路现象,系统为刚性系统,所以在solver选择时需要选择刚性求解算法。
    通过VC++编写的应用程序采用引擎方式通过命令行仿真设置Solver只是改变了当前仿真的Solver,默认设定为Simulink中的仿真参数设定。比如对于可控整流电路故障诊断系统这一刚性系统,即便程序中选用了ode15s而默认为ode45,则本次仿真确实使用ode15s求解,但仍然会报警说应该用刚性解法。不过对于刚性系统,ode45可不好用,因此从仿真效果(如耗时)上可以认定程序中设定的刚性解法奏效了。
    VC数据类型与MATLAB数据类型之间的转换
    使用VC++6.0与MATLAB通过引擎方式混合编程,不可避免地要在VC数据类型与MATLAB数据类型之间进行转换。一般来说,可以使用memcpy进行转换。即通过mxGetPr()获取MATLAB数据类型的指针,再调用memcpy,比如在命令行方式下设置仿真时间时可以如下处理:
    //设定仿真时间VC数据类型àMATLAB数据类型
    double timespan[2];
    timespan[0] = (double) m_fStartTime;
    timespan[1] = (double) m_fStopTime;
    T = mxCreateDoubleMatrix(1, 2, mxREAL);
    memcpy((char *) mxGetPr(T), (char *) timespan, 2*sizeof(double));
    engPutVariable(ep, "T ", T);
    // MATLAB数据类型àVC数据类型
    double test[2];

    memcpy((char*)test, (char*)mxGetPr(T), 2*sizeof(double));


    转自:http://hi.baidu.com/yaoyuan725/item/1ca97caaf61506f615329bf3

    展开全文
  • 图像滤镜艺术---PS引擎库发布

    千次阅读 2016-07-31 14:57:29
    分享一个PS算法引擎库,包含大部分PS图像算法,轻松实现PS效果到代码的转换,无水印,免费使用!

    为了方便大家用PS实现漂亮的滤镜,然后转换为相应的代码实现,本人发布PS引擎库ZPhotoEngine 4.0的SDK完整版。

    这个SDK中包含了大部分的PS基础算法:

    对比度亮度调节(包含PS中的线性和非线性的对比度亮度调节)

    饱和度色相明度调节

    曲线调节

    色阶调节

    色彩平衡

    通道混合器

    自动对比度

    自动色阶

    USM

    高反差保留

    去色

    直方图均衡化

    过度曝光

    黑白

    阈值

    查找边缘

    表面模糊

    高斯模糊

    中间值

    色温调节

    背景虚化

    图层混合算法

    浮雕

    马赛克

    动感模糊

    。。。。。。

    大部分算法与PS具有较高相似度,可以很方便的实现如下过程:

    PS设计滤镜效果-----PSD文件----ZPhotoEngineSDK调用实现

    这里给大家 分享一下,如有其他问题,可以联系QQ1358009172

    SDK包下载地址(包含SDK及详细说明文档):点击打开链接

    展开全文
  • 如何基于规则引擎打造规则

    万次阅读 2013-07-05 14:50:31
     2、业务规则的变更,可以直接由用户通过web界面来修改变更。  针对这一类需求情况,其实我们有一般由以下的几种可选方案:  1、选择规则引擎来实现。  现有的规则引擎产品一般都能满足以

        规则引擎是面向技术人员的工具。目前技术人员为什么会选择规则引擎来使用,主要是基于如下情形来考虑:

        1、业务逻辑从程序代码中脱离出来。通过配置来实现业务规则。

        2、业务规则的变更,可以直接由用户通过web界面来修改和变更。

        针对这一类需求情况,其实我们有一般由以下的几种可选方案:

        1、选择规则引擎来实现。

              现有的规则引擎产品一般都能满足以上这两种要求。可以不用代码,比如Java来实现业务逻辑,而采用规则语言通过规则配置器来完成。用户需要变更时,一般都会提供C/S或者B/S版本的规则配置器来实现。

        2、采用动态语言:

              直接采用JS或者其他的动态语言BeanShell等,也可以实现不通过Java代码来实现业务逻辑。通过也可以提供一个编辑界面,让用户来进行修改。

        3、表格配置或者自定义公式

               通过定义一个表格或者加上一定的自定义公式语法来实现具体的逻辑。

         以上几种方案,在不同的项目中,都有各自的优缺点:

        1、采用规则引擎实现,使得业务规则的配置更加标准化、专业化。同时一般的规则引擎都会对修改的记录进行版本控制,以便于跟踪、测试、恢复等操作。规则配置器一般提供的界面,更加人性化,用户使用上更加便捷。缺点是会使得整个系统的架构变得庞大,需要有人专门负责研究规则引擎,以及相关的配置和管理工具。

        2、采用动态语言的实现,对于开发上会更加简单。动态语言一般纯粹处理逻辑,因此接口设计上会更加容易。同时使用动态语言时,一般很少会去考虑继承关系、相互调用等问题。缺点是可支持的逻辑相对扁平化,也相对简单。同时动态语言需要有个学习过程。

        3、通过表格配置以及自定义公式,是一般项目中最常用的。通过一个配置表来实现对应管理、逻辑流转。这种方式对于用户来说最友好,用户操作上更加方便,问题也最少。缺点是不够灵活,开发工作量大。

        以上这些考虑,都只是从一个技术角度出发,如何将一个技术编码工作,因为需求的不断变化,而更换一种实现方式。使得不会因为需求变化,而造成对代码的改动。因为代码改动会带来一系列的问题,变更流程、测试、部署等等。

        但是我们既然已经将和业务相关的业务逻辑,从程序中脱离出来,就不能仅仅停留在开发实现阶段。而应该将其纳入到客户的管理系统中。成为用户系统管理的一部分。比如我们至少应该考虑,用户可以查阅有多少业务规则,是可以由用户配置,哪些人对哪些业务规则有查看、创建、修改、删除权限,谁在何时进行了修改,谁负责的测试,测试结果如何,什么时候应用了新的修改之后的业务规则等等。

        在这种情况下,我们不能仅从规则引擎工具的角度来考虑这个实现问题,而应该从规则库管理角度来考虑问题。

        因此,不管我们是采用规则引擎还是动态语言,来实现业务逻辑供用户自己维护修改。就应该加强更多的用户维护方面的管理功能,使得这个工作更加标准化、规范化。

        实现一个业务规则库,需要考虑以下方面的问题:

        1、用户权限管理。采用现有的应用系统的权限系统,增加相应的针对规则的权限设置。

        2、规则权限设置时,需要考虑查看、创建、修改、删除、测试、审核、发布、执行等权限。

        3、规则分类的考虑。考虑多种方式来进行分组,用户角色权限按照规则组进行分配。

        4、规则版本控制:可以设置规则的版本号,可以设置规则组的标签,以便测试发布是区分。

        5、规则的单独测试:对于规则的测试,可以设置批量测试用例,可以在线执行测试。

        当然,如果应用系统是集群的,还需要考虑集群方面的问题。因此规则的执行中,最好是无状态的。

        在将业务规则从程序中脱离出来进行管理,是解决用户需求变更的有效手段,同时我们应该需要用规则库管理的思想来更近一步,达到规范、标准、统一。

    展开全文
  • 现在的游戏开发变得越来越复杂,需要制作各种炫丽的效果,还要制作各种基于 2D 或者 3D 的场景。为了节省游戏开发者的时间,让开发者集中精力在游戏的创新上,出现了...现在这么多的游戏引擎,各有各的优点缺点,为了
  • 搜索引擎-语料

    千次阅读 2007-01-19 22:05:00
    经过科学选材标注、具有适当规模的语料能够反映记录语言的实际使用情况。人们通过语料观察把握语言事实,分析研究语言系统的规律。语料已经成为语言学理论研究、应用研究语言工程不可缺少的基础资源...
  • 网页级垂直搜索引擎技术

    千次阅读 2008-07-15 09:08:00
    垂直搜索是针对某一个行业的专业搜索引擎,是搜索引擎的细分延伸,是对网页中的某类专门的信息进行一次整合,定向分字段抽取出需要的数据进行处理后再以某种形式返回给用户。 垂直搜索引擎和普通的网页搜索引擎...
  • [数据统计] 搜索引擎索引:百度大于雅虎中国 之一互联网渗透的越深、世界就会越平;信息越透明,诚信越重要---题记 关心搜索引擎的朋友们都知道,搜全率搜准率是衡量搜索引擎系统的两项基础指标,在很多关于...
  • 邮件解析引擎FastMail大功告成!

    千次阅读 2004-10-17 22:51:00
    1 概述邮件解析API完全使用面向对象技术设计,使用C++语言开发的用于邮件解析组装的。它提供了一些类用来解析组装Internet邮件,如MimeMessageMimeBodyPart,用于Internet邮件协议实现并且遵循RFC822...
  • 也许一个游戏引擎的物理,人工智能,动画,音效,特效可以使用第三方来实现.,但是脚本引擎却不能是第三方的,你必须自己写 有了脚本引擎我们就可以很方便的将第三方整合到自己的游戏引擎中,,也让游戏开发变得简单...
  • 语音运行库和引擎(中、韩、日、英四国语言朗读语音包 ) 语音运行库和引擎(中、韩、日、英四国语言朗读语音包 ) 语音运行库和引擎(中、韩、日、英四国语言朗读语音包 ) 语音运行库和引擎(中、韩、日、英四国...
  • 引擎开发一: glm及使用

    千次阅读 2020-04-27 10:07:23
      glm是一个发展了十年以上的数学,opengl没有内置的数学,一般引擎开发都使用glm作为数学。 官方网址为:https://glm.g-truc.net/ 安装及使用 环境:win7 VS2013 1. 下载glm: github地址:...
  • 作者:ejinxian 就像在汽车中,引擎完成主要的工作,使汽车看起来不可思议。游戏引擎同理,游戏开发者完成细节的工作,使游戏看起来真实、吸引人...而且,随着手机平板游戏的出现,所需预算比以前更少,对 JAVASCR
  • 本语音引擎在Windows 8系统中可直接使用,可调用微软最新语音,而在Windows XPWindows 7系统中并没有默认安装该语音引擎,因此没有Win 8的情况下对微软新版的语音蚂蚁早就垂涎八千尺了,例如微软的Huihui女声...
  • 什么是地图引擎和导航引擎

    万次阅读 2016-12-04 21:45:43
    总有人问我这个问题,什么是地图引擎和导航引擎?它地图软件或导航软件有啥区别?我也总是翻来覆去的解释,有些时候还真不好说明白。现在提笔回答这个问题,嗯,我得斟酌下。  引擎一词是英文单词engine的音译,...
  • 众所周知,Megascans中的资源用来制作AAA游戏或者实景场景很有帮助 以下有三波获取资源的方式: 1.在虚幻商城上Megascans板块能免费获取一些资源包 2.待UE4 4.24发布时会再公开内容新的内容,到时候可供下载 ...
  • mustache是短小精悍速度超快的js模板引擎库,地址:http://github.com/janl/mustache.js
  • 让脚本引擎支持动态链接

    千次阅读 2004-09-09 10:03:00
    大家是不是总是郁闷,要在脚本中访问... 其实有个简单的方法,直接让你的脚本引擎支持动态链接即可。 首先,我们知道,访问动态链接有两种方法,一种是在连接的时候指定,另外一种则是在运行中指定。为了能让脚
  • 我知道fmod用VC应该很简单,但是不会用devc++使用这个引擎,我想在控制台运行程序的时候加BGM,或者有其他的办法吗?
  • Python基础:标准库和常用的第三方库

    万次阅读 多人点赞 2019-05-04 18:24:13
    Python的标准有: 名称 作用 datetime 为日期时间处理同时提供了简单复杂的方法。 zlib 直接支持通用的数据打包压缩格式:zlib,gzip,bz2,zipfile,以及tarfile。 random 提供了生成...
  • js资源文件所处位置:           在html文件引用js &lt;script src="...--导入本地js--&gt; &lt;script src="../static/scripts/jquery.validate.m...
  • 搜索引擎solrelasticsearch

    万次阅读 2016-04-23 10:19:22
    一、关于搜索引擎搜索引擎(Search Engine)是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。搜索引擎包括...
  • 7个源代码()搜索引擎的网站

    千次阅读 2010-06-20 23:34:00
    7个源代码()搜索引擎的网站 <br />不管你是初学一门计算机语言或技术,还是想学习别人的经验创意。做为一个开发人员,都会经常需要到搜索一些代码,下面是7个地方可以帮助你快速寻找到你需要的代码。...
  • 规则引擎在基础软件,或者在很多系统中已经不是稀奇的玩意,最近这几年,国内不断兴起很多的规则引擎,至于什么是规则引擎,在这篇文章中,就不做介绍了,我想能看以下内容的,多少对规则引擎也都有所了解了。...
  • 在windows程序中嵌入Lua脚本引擎--编写自己的Lua

    千次阅读 热门讨论 2012-11-29 21:55:17
    在《在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统》一文中,我提到了使用Lua的ffi,可以让我们像写C代码一样写lua程序。这是个非常令我们这些C程序员激动的事。但是我们使用ffi写出来的...
  • 搜索引擎和知识图谱那些事

    万次阅读 2017-09-15 17:41:25
    搜索引擎和知识图谱那些事 分类: 知识图谱(14) 版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ 目录(?)[+] 这是一篇基础性文章,主要介绍搜索引擎和知识图谱的一些原理...
  • 如果不熟悉协同过滤算法的可以查看我的一篇文章:【推荐系统】协同过滤浅入(基于用户...该推荐引擎是用于GitHub的推荐 这里使用GitHub的API,基于协同过滤的推荐系统。 这个推荐系统的任务是获得我所有标星的资...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 446,628
精华内容 178,651
关键字:

引擎和库