精华内容
下载资源
问答
  • 如何优化URL?方法如下:1、URL越短越好搜索引擎上只要URL不超过1000字符,收录都没有问题。但真的使用了数百字符的URL,会严重影响用户体验,对用户来说很不方便。此外,短URL也有利于传播,即使链接时复制短...

    fcc8422891335e1ac474c54f0421b40f.png

    如何优化URL?方法如下:

    1、URL越短越好

    搜索引擎上只要URL不超过1000个字符,收录都没有问题。但真的使用了数百个字符的URL,会严重影响用户体验,对用户来说很不方便。此外,短URL也有利于传播,即使链接时复制短URL也没有问题,长的拷贝也很麻烦,有时不能完全拷贝,容易发生404错误。

    2、避免参数过多

    尽可能使用静态URL。如果无法实现技术上的静态URL,则动态URL需要减少参数。一般建议2~3个参数之内。许多参数不利于用户体验,不利于检索,可能引起收录问题。

    3、文件和目录的描述

    在国外网站上,目录和文件名应该具有一定的记述性,用户可以很容易地知道这个URL是什么样的网页,一眼就可以知道是关于Photoshop的网页。

    4、URL的字母都要小写字母

    小写字母容易人工输入,不会混合大小写而犯错误。有些服务器区分大小写,例如Linux系统服务器。

    5、词符的使用

    一般建议使用,例如健康减肥效果,不要使用下划线或其他更奇怪的字符。

    6、目录形式还是文件形式

    目录形式的优点之一是,之后通过在web站点变更编程语言,不需要变更URL,也不需要进行特别的处理。文件格式的URL在改写URL之前,文件扩展名可能会发生变化。

    7、目录层次尽量少

    物理结构层次越少越好,分层数越多的,目录层次也必然增多。在可能的情况下,尤其是静态URL,尽量使用比较少的目录层次,搜索引擎比较喜欢短的URL。

    各位朋友如果还有什么补充,欢迎在评论区提出,我会逐步完善最新的回答链接。

    我分享过很多SEO优化方面的东西,深刻的描绘了一个SEO站长的辛酸成长经历,如果你想要学习更多的SEO优化技巧,可以从我的专栏中找到更多的干货文章:

    SEOzhuanlan.zhihu.com
    e5aab195bbcc3535352df4de86e72e83.png

    双击SEO星火,一个用亲身经历回答问题的SEO人。

    最后,如果你对SEO优化感兴趣,并且对网站优化推广还不理解,欢迎私信/评论学习,我会发你3.7G软件包和内部SEO优化课程(教你运用SEO如何月入1W+),让你在SEO这条路,能够少走一点点弯路,哪怕只是一点点。

    e79ec8e7f154a3da67be9c937b9b929c.png
    展开全文
  • 当MySQL主线程在很短的时间内得到非常的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一新线程。back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少请求可以被存在...

    back_log参数的作用

    指定MySQL可能的TCP/IP的连接数量(一个TCP/IP连接占256k),默认是50。

    当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一个新线程。

    back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听accept队列的大小。

    不同的操作系统在这个accept队列大小上有它自己的限制,设定back_log高于你的操作系统的限制将是无效的。

    参考值:

    back_log=300

    # 或

    back_log=500

    thread_cache_size参数的作用

    thread_cache_size线程池,线程缓存。这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能。

    每建立一个连接,都需要一个线程来与之匹配,此参数用来缓存空闲的线程,以至不被销毁,如果线程缓存中有空闲线程,这时候如果建立新连接,MYSQL就会很快的响应连接请求。

    可根据物理内存设置规则如下:

    1G ―> 8

    2G ―> 16

    3G ―> 32

    大于3G ―> 64

    参考值:

    table_open_cache参数的作用

    table_open_cache,表高速缓存的大小。

    当某一连接访问一个表时,MySQL会检查当前已缓存表的数量。如果该表已经在缓存中打开,则会直接访问缓存中的表已加快查询速度;如果该表未被缓存,则会将当前的表添加进缓存并进行查询。

    在执行缓存操作之前,table_cache用于限制缓存表的最大数目:如果当前已经缓存的表未达到table_cache,则会将新表添加进来;若已经达到此值,MySQL将根据缓存表的最后查询时间、查询率等规则释放之前的缓存。

    参考值:

    table_open_cache=1024

    学习笔记

    ###CPU的优化

    # innodb_thread_concurrency设置的值约等CPU数

    innodb_thread_concurrency=32# 连接的优化

    内存的优化

    # 关闭查询缓存,缓存到应用层(如redis),不建议在MYSQL层面开始,5.6有BUG

    query_cache_type=0

    query_cache_size=0

    IO的优化

    # 单实例时物理内存的60-70%

    innodb_buffer_pool_size=50G

    # 每秒后台进程处理IO数据的上限,一般设置总IO的75%左右。 SSD设置成20000

    innodb_io_capacity=20000

    # innodb redo日志组数量(iblog)

    innodb_log_files_in_group=4

    # innodb redo日志组文件大小

    innodb_log_file_size=1000M

    # RAID使用直接写,提高性能

    innodb_flush_method=O_DIRECT

    # 脏页达到50%就写磁盘

    innodb_max_dirty_pages_pct=50

    # 设置一个表对应一个文件,保持默认

    innodb_file_per_table=on

    # 设置PAGE大小(默认16k)

    innodb_page_size=4k

    # SSD盘设置为0

    innodb_flush_neighbors=0

    连接的优化

    # 指定MySQL可能的TCP/IP的连接数量,现在一般都是长连接,这个值不建议设置过大

    back_log=300

    # 最大的连接数

    max_connections=3000

    # 最大的用户连接数(和上面差20,是留给管理用的)

    max_user_connections=2980

    # 表描述符缓存大小,可减少文件打开/关闭次数

    table_open_cache=1024

    # 线程池,线程缓存

    thread_cache_size=512

    # 连接超时断开

    wait_timeout=120

    # 交互超时断开

    interactive_timeout=120

    数据库一致性优化

    innodb_flush_log_at_trx_commit=1

    sync_binlog=1

    展开全文
  • 许多企业喜欢使用Dynamsoft Barcode Reader SDK,因为它具有灵活的参数配置和强大的对多个条形码的解码能力。在本文中,让我们看一下条形码SDK模板以及从开发人员的角度优化解码性能的可能方法。 如何配置用于解码...

    许多企业喜欢使用Dynamsoft Barcode Reader SDK,因为它具有灵活的参数配置和强大的对多个条形码的解码能力。在本文中,让我们看一下条形码SDK模板以及从开发人员的角度优化解码性能的可能方法。

    如何配置用于解码性能的模板

    如果您从未尝试过Dynamsoft Barcode Reader SDK,则可以在在线条形码游乐场玩耍,只需更改模式即可直接比较性能差异。
    æ¡ç è§£ç æ€§èƒ½çš„æ¨¡æ¿

    此外,如果您是专家,则可以单击高级设置自行调整一系列参数。

    为了方便开发人员,我向Github上传了五个有用的模板文件:

    Speed.json
    Balanced.json
    Coverage.json
    Morecoverage.json
    Mostcoverage.json
    解码速度还是解码精度?您可以权衡取舍,具体取决于特定的使用方案。
    这是我的测试图像:
    æ‰€æœ‰æ¡å½¢ç ç±»åž‹

    我们来看一下使用不同模板的检测准确性和时间成本:

    BarcodeReader.exe AllSupportedBarcodeTypes.png  license.txt  speed.json   
    Total barcode(s) found: 12. Time cost: 63 ms
    
    BarcodeReader.exe AllSupportedBarcodeTypes.png  license.txt   balanced.json
    Total barcode(s) found: 13. Time cost: 140 ms
     
    BarcodeReader.exe AllSupportedBarcodeTypes.png  license.txt   coverage.json
    Total barcode(s) found: 13. Time cost: 844 ms
     
    BarcodeReader.exe AllSupportedBarcodeTypes.png  license.txt   morecoverage.json
    Total barcode(s) found: 13. Time cost: 1610 ms
     
    BarcodeReader.exe AllSupportedBarcodeTypes.png  license.txt   mostcoverage.json
    Total barcode(s) found: 13. Time cost: 3156 ms
    

    就我而言,要保证准确性和解码速度,最合适的模板是balance.json。
    使用多线程可以加快多条形码解码的性能吗?

    按照我们的常识,解码单个条形码的时间成本应小于解码多个条形码的时间成本。因此,读取多个条形码的一种可能的优化方法是创建多个工作线程,以同时处理不同的条形码符号。

    这是用于顺序解码一维和二维条形码的代码:

    barcode_decoding(buffer, size, BF_CODE_39, 1, license, config);
    barcode_decoding(buffer, size, BF_QR_CODE, 1, license, config);
    barcode_decoding(buffer, size, BF_PDF417, 1, license, config);
    barcode_decoding(buffer, size, BF_DATAMATRIX, 1, license, config);
    总时间成本为407毫秒:
    Thread id: 22536. Type: CODE_39
    Thread id: 22536. Total barcode(s) found: 1. Time cost: 235 ms
     
    Thread id: 22536. Type: QR_CODE
    Thread id: 22536. Total barcode(s) found: 1. Time cost: 47 ms
     
    Thread id: 22536. Type: PDF417
    Thread id: 22536. Total barcode(s) found: 1. Time cost: 62 ms
     
    Thread id: 22536. Type: DATAMATRIX
    Thread id: 22536. Total barcode(s) found: 1. Time cost: 63 ms
    

    为了优化解码性能,我可以创建四个线程来执行相同的操作:

    int starttime = gettime();
    thread t1(barcode_decoding, buffer, size, BF_CODE_39, 1, license, config); 
    thread t2(barcode_decoding, buffer, size, BF_QR_CODE, 1, license, config);
    thread t3(barcode_decoding, buffer, size, BF_PDF417, 1, license, config);
    thread t4(barcode_decoding, buffer, size, BF_DATAMATRIX, 1, license, config);
    t1.join();
    t2.join();
    t3.join();
    t4.join();
    int endtime = gettime();
    printf("Thread time cost: %d ms\n\n", (endtime - starttime));
    

    最终时间成本为265毫秒:

    Thread id: 24024. Type: QR_CODE
    Thread id: 24024. Total barcode(s) found: 1. Time cost: 78 ms
     
    Thread id: 17384. Type: DATAMATRIX
    Thread id: 17384. Total barcode(s) found: 1. Time cost: 78 ms
     
    Thread id: 24264. Type: PDF417
    Thread id: 24264. Total barcode(s) found: 1. Time cost: 94 ms
     
    Thread id: 4060. Type: CODE_39
    Thread id: 4060. Total barcode(s) found: 1. Time cost: 265 ms
     
    Thread time cost: 265 ms
    

    到目前为止,似乎还不错。但是,如果将多种条形码类型传递给Dynamsoft条形码解码API,则会发生神奇的事情:

    barcode_decoding(buffer, size, BF_CODE_39 | BF_DATAMATRIX | BF_QR_CODE | BF_PDF417, 1, license, config);
    

    它比您自己的多线程解决方案快:

     Thread id: 20308. Type: PDF417
    Thread id: 20308. Type: QR_CODE
    Thread id: 20308. Type: DATAMATRIX
    Thread id: 20308. Type: CODE_39
    Thread id: 20308. Total barcode(s) found: 4. Time cost: 250 ms
    

    原因是所有Dynamsoft条形码解码API均在线程中实现。因此,您无需创建线程来优化解码性能。

    线程数如何影响Dynamsoft Barcode SDK性能?
    您可能已经注意到,有一个名为maxAlgorithmThreadCount的参数。我们可以通过增加线程数来提高SDK性能吗?

    我根据硬件线程做了一个简单的测试:

    const auto processor_count = std::thread::hardware_concurrency();
    int minimum_count = 1, minimum_timecost = 0;
        for (int i = 0; i < processor_count; i++) 
        {
            printf("Thread count: %d. ", i + 1);
            int timecost = barcode_decoding(buffer, size, formats, i, license, config);
            if (i == 0) 
            {
                minimum_count = 1; 
                if (timecost > 0)
                {
                    minimum_timecost = timecost; 
                }
            }
            else {
                if (timecost < minimum_timecost)
                {
                    minimum_count = i + 1;
                    minimum_timecost = timecost; 
                }
            }
        }
        printf("Multi-thread best performance: thread_count = %d, timecost = %d \n\n", minimum_count, minimum_timecost);
    

    每次我运行该应用程序时,都会得到不同的结果。通过使用我的测试图像,性能没有显着差异:

    Thread count: 1. Thread id: 26376. Total barcode(s) found: 13. Time cost: 141 ms
     
    Thread count: 2. Thread id: 26376. Total barcode(s) found: 13. Time cost: 141 ms
     
    Thread count: 3. Thread id: 26376. Total barcode(s) found: 13. Time cost: 125 ms
     
    Thread count: 4. Thread id: 26376. Total barcode(s) found: 13. Time cost: 140 ms
     
    Thread count: 5. Thread id: 26376. Total barcode(s) found: 13. Time cost: 157 ms
     
    Thread count: 6. Thread id: 26376. Total barcode(s) found: 13. Time cost: 203 ms
     
    Thread count: 7. Thread id: 26376. Total barcode(s) found: 13. Time cost: 156 ms
     
    Thread count: 8. Thread id: 26376. Total barcode(s) found: 13. Time cost: 140 ms
     
    Multi-thread best performance: thread_count = 3, timecost = 125
    

    显然,一张测试图像没有任何意义。理想情况下,您应该使用图像数据集来衡量性能。因此,如果您有兴趣,现在就去动手吧。

    本文章转载自【慧都科技】。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,尊重他人劳动成果

    展开全文
  • 如果是云上的数据库环境通常不会存在这些问题,现如今的各个公司的云上产品都是已经经过优化过的,docker容器化部署,一键完成部署安安装,并且参数配置和性能也是根据用户的购买而设置成最优的。 本文是针对我们的...

    如果是云上的数据库环境通常不会存在这些问题,现如今的各个公司的云上产品都是已经经过优化过的,docker容器化部署,一键完成部署安安装,并且参数配置和性能也是根据用户的购买而设置成最优的。

    本文是针对我们的产品在用户环境部署,每个都单独安装部署Mysql服务器的应用场景。其它数据库当然也有参考意义。

    在我们的应用产品从研发,到测试,到最终用户的安装部署,经常会出现各种数据库性能问题。我们需要经常性的对各种场景进行数据库优化。

    我们的优化可能包括多种方式,从硬件配置,到架构,到软件本身的配置,到应用程序的代码优化,等等。

    然而除了少部分针对特殊场景需要做的优化措施,大部分优化措施我们都是可以预见的,可以事先做好,避免到用户现场部署好后再采坑。

    对用户来说,通常,时间太长的停机都是不可接受的。

    当可以预见我们的产品会有众多的用户,而对每个用户都是独立部署数据库服务器的时候,我们就需要有方便的措施,尽可能的实现把可预见的优化措施实现做好,让产品在用户环境真正运行的时候DBA可以后顾无忧。

    对于大多数公司的产品来说,通常研发只负责产品的开发,而实施负责用户现场的产品的安装部署。想要靠实施去优化用户环境的数据库,显然不太可能。而对于DBA来说,用户一旦多了,就会分身泛术。所以我们需要有一键安装部署的方案,不仅能把我们的应用产品部署到现场环境,也需要把我们优化好的数据库应用部署到现场环境。

    下面就是我的方案:

    1:获取mysql绿色版

    我们需要从mysql官方下载符合产品需求的mysql绿色版,zip包,不能使用msi格式的,因为mysql官方安装版通常都是没有优化过的,有太多的参数需要优化,并且无法按照我们的安装配置要求实现定制化。

    2:修改mysql绿色版

    DBA在本地环境,对绿色版mysql进行初始化,然后开始加入优化特性。比如针对我之前文章说的那些数据库优化参数,我们可以针对服务器的物理内存,针对不同用户的环境,不同内存配置,4G,8G,16G,32G,64G,128G等,其它内存的都可以算作这个附近区间范围的。我们可以给绿色版mysql添加多个不同的配置文件,每个配置文件中的参数都根据对应的内存大小做好优化。并添加现场避坑的参数,如skip-namre-resolve (跳过命名解析,避免跨IP访问的机器无法解析域名而访问不了)、max_connettions,max_allowed_packet(改大可以增加数据库备份恢复的性能)、max_connections 等等,这里不一一列举。也可以加上安全性相关的配置,如mysql密码校验插件 plugin-load=validate_password.dll等等,还有针对负载均衡部署场景需要的开启二进制日志相关的配置,以及对应的日志保留策略相关的参数。这些参数都是在mysql的官方安装包中没有的,我们需要手动事先配置好,并添加到配置文件中。这些可能是通用的。而对于不同内存的配置,主要是innodb_buffer_pool_size,join_buffer_size, innodb_log_file_size,等等,这些可以根据不同的物理内存,进行不同的优化配置,各个配置文件中的内容则是不一样的。

    我们还可以加上其他的修改,如初始化用户,为了增强安全性,去掉默认的root用户,添加非roo用户的默认管理员,针对现场应用程序,分配不同权限的初始用户,并添加好必要的权限,以及满足密码安全性要求的密码等。这些也是在mysql的官方安装包中没有,我们需要定制化处理的。

    在全部定制化修改都完成后,我们再删除部分现场需要的日志,如事务日志,错误日志,以及二进制日志,这些都是可以在Mysql安装部署后第一次启动时重新创建的。保持定制化安装的干净将有利于实施在现场的安装部署。

    3:制作Mysql绿色版安装包

    针对windows用户环境,我们可以通过nsis脚本编写安装包,实现绿色版安装包的一键安装部署。通过安装包,把数据库安装部署到指定存储位置。安装包需要判断服务器的物理内存,以选择不同的配置文件作为默认的配置参数,并实现安装路径文件权限的修改, 安装包也需要实现安装mysql服务,并启动服务等,最终实现可以一键安装的exe程序。

    针对linux用户,我们可以用shell制作安装脚本,用shell脚本实现tar包的解压,服务器物理内存的获取,配置的修改,mysql实例服务的安装等等,所有上面提到的NSIS脚本实现的windows安装包的功能都可以用shell脚本实现。

    4:合理的数据库脚本安装策略

    对于应用程序的部署来说,不仅仅需要安装好数据库服务器,还需要创建产品对应的数据库。这些我们都可以通过sql脚本事先做好,在数据库服务器安装好后,我们可以通过安装包调用mysql的命令来实现产品数据库的sql脚本的运行,实现产品数据库的安装。同样通过nsis或者shell脚本定制化的安装包来实现修改应用程序数据库连接的配置。针对应用程序本身的性能优化相关的sql,我们应该在产品数据库部署到现场之前,就做好充分测试,做好相关的加索引,修改表结构等性能优化,这些都可以随产品安装的sql一起部署到现场用户环境。

    其它的优化,包括主从复制,双主复制,数据库集群等,我们都可以通过事先配置好,用脚本做好安装包,最终实施在现场用户环境部署时只需要执行指定的脚本或者安装包一键完成所有的架构相关的优化。

    只要做好上面几个步骤,我们就可以实现把预定好的性能优化措施添加到我们的产品数据库中去了,最终用户现场的数据库也就是最优的,DBA也可以高枕无忧了!

    展开全文
  • 该案例展示了如何利用进化算法+进程/线程来优化SVM中的两个参数:C和Gamma。 在执行本案例前,需要确保正确安装sklearn,以保证SVM部分的代码能够正常执行。 本函数需要用到一个外部数据集,存放在同目录下的...
  • 亿级流量电商系统如何优化JVM参数设置:ParNew+CMS 大型电商系统后端现在一般都是拆分为多个子系统部署的,比如,商品系统,库存系统,订单系统,促销系统,会员系统等等。 占用字节表: 我们这里以比较核心的...
  • 如何优化tomcat配置(从内存、并发、缓存4方面)优化 Tomcat有很方面,我从内存、并发、缓存四方面介绍优化方法。   ** 一.Tomcat内存优化 **  Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 ...
  • 在前面有一篇文章,我...这看起来没有什么问题,那么如果一个项目真的需要很多个参数化变量去构建,那么我们直接这样写肯定不行,本篇就来讨论如下如何优化这个问题。 1.问题场景 之前的场景是这样,相关文章ht...
  • 是数据库的一种作用机制,为了节约内存的开销, 其会将为数众多并占用大量资源的细粒度的锁转化为数量较少的且占用相对较少资源的粗粒度的锁,多数情况下主要指将为数众多的行锁升级为一表锁。 当然,DB2 支持很...
  • MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务型)、存在多个分支、读写...
  • 但问题来了,对于一查询,查询条件那么,不可能做到每条件都优化,那怎么优化呢?通过监控软件找到用户操作带的参数,可以推断出哪些查询条件用的最多,进行直接优化这些条件组装的SQL。  请求后面的参数为...
  • Tomcat有很方面,我从内存、并发、缓存几方面介绍优化方法。  一.Tomcat内存优化  Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数。   ...
  • 原文:http://blog.csdn.net/centre10/article/details/5063969Tomcat有很方面,我从内存、并发、缓存四方面介绍优化方法。  ** 一.Tomcat内存优化 **  Tomcat内存优化主要是对 tomcat 启动参数优化,我们...
  • 1、概念描述 所谓的锁升级(lock escalation),是数据库的一种作用机制,为了节约内存的开销, 其会将为数众多并占用大量资源的细粒度的锁转化为数量... 当然,DB2 支持很粒度的锁,如表空间(table space),...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,122
精华内容 448
关键字:

多个参数如何优化