首页 文章 精选 留言 我的

精选列表

搜索[文件分享],共10000篇文章
优秀的个人博客,低调大师

京东云PostgreSQL在GIS场景的应用分享

在地图或地理信息有关的场景里,地址关键词的检索尤其重要。比如打开百度地图,想要查询某个位置的信息“北京市海淀区清华东路17号中国农业大学”,往往我们输入的是关键词“中国农业大学”而不是精确到街道的详细地址信息。在地址关键词检索的背后,需要的是一款可以支持全文检索和模糊查询的数据库与之匹配,以此快速提高地址检索的效率。 PostgreSQL被誉为“世界上可获得的最先进的开源数据库 ”,拥有很强的文本搜索能力,不仅支持全文检索,PostgreSQL还支持模糊查询、正则查询。除此之外,PostgreSQL还内置了表达式索引、Gin索引功能,配合丰富的插件生态,在地址关键词检索方向有比较大的优势。 本文介绍了一种基于PostgreSQL物流地址关键词检索的方法,以此来说明如何用PostgreSQL提升物流地址关键词的检索效率。 一、应用背景 在需要地址检索的场景中,用户输入地址文本后需要对地址进行分词,然后通过全文索引技术与地址语料数据库进行匹配,得到规范化的地址信息,并在此基础上进行地址定位。通常地址查询语句在经过地址分词处理后会被分割成几段关键词,通过关键词匹配到历史地址语料数据库,再返回查询语句得到查询结果。 通常从用户输入关键词查询到得到返回结果由于关键词分词和匹配方法不同,会耗时几秒到几十秒不等。 检索数据库中的条目是很基本常见的功能,实现的方法也很多,常见包括: 1、基于Elasticsearch或Lucene这类专业独立的检索引擎实现 2、基于数据库自带的检索功能实现 虽然基于Elasticsearch这类系统能实现比较灵活的检索功能,但开发和运维成本也将大大增加,如何利用PostgresSQL内置的功能快速高效的实现大多数中文检索场景是我们要讨论的技术方案。 二、技术方案 GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构,其中key是一个键值,而posting list 是一组出现过key的位置。如('hello', '14:2 23:4')中,表示hello在14:2和23:4这两个位置出现过,在PostgreSQL中这些位置实际上就是元组的tid。表中的每一个属性在建立索引时,都可能会被解析为多个键值,所以同一个元组的tid可能会出现在多个key的posting list中。通过这种索引结构可以快速的查找到包含指定关键字的元组。 pg_trgm是PostgreSQL基于N-gram模型分词的扩展插件,它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列,pg_trgm就是三元的3-Gram,每连续的3个字符为一个TOKEN,然后在对TOKEN建立GIN倒排索引,就可以进行高效、精准的模糊查询。 pgbigm与pg_trgm类似,也是PostgreSQL基于N-gram模型分词的扩展插件,区别在于pgbigm是二元的2-Gram。 结合PostgreSQL 索引和分词模型的特点,我们构建了1亿行左右的北京区域的本文地址数据进行性能测试,对比分析PostgreSQL在物流关键词检索的场景里有明显效率的提升,测试结果如下: 从以上结果可以看出,无论是pg_trgm+gin还是pgbigm+gin性能比常用的Btree在进行模糊查询的时候,性能要好很多。同时,因为pg_trgm生成的TOKEN是三个字符,只有在三个字符以上条件,才能匹配到对应的TOKEN,当小于3个字符,需要前后模糊搜索1个或者2个字符,所以检索性能下降比较明显,相比来说pgbigm(基于二元的Tri-Gram)在处理单字、双字字符的模糊查询效率都比较高。由于物流的关键字都是三个字符以上,所以采用的是pg_trgm+gin的方案进行关键词检索查询,从而保证毫秒级别的响应时间。 另外对于文本地址数据,往往都具备自然语言的特性,jieba结巴分词是一个强大的分词库,分词更加贴合业务属性特点,主要功能包含:支持不同模式的分词、自定义字典、关键字提取、词性标注。pg_jieba运用了jieba分词算法,构建了PostgreSQL中文分词插件,分词效果也有不错的表现。 三、总结 综上,PostgreSQL支持丰富的索引,具备强大的全文检索能力以及多样的插件生态,支持不同场景下的文本查询,用户完全不需要将数据同步到搜索引擎,再来查询,使用PostgreSQL可以大幅度的简化用户的架构,开发成本,同时保证数据查询的绝对实时性。 京东云基于开源的 PostgreSQL构建的一款功能强大的关系型数据库云数据库 PostgreSQL ,支持丰富的数据类型及地理信息扩展,具有强大的并行计算能力。支持备份、监控、迁移等全套解决方案。 作者:曲艺伟/彭智

优秀的个人博客,低调大师

分享GitHub上的7个热门TypeScript项目

这里收藏Github上 7个热门TypeScript项目(相关数据是截止2021年04月06日),可以让你的开发变得轻松。编码能力的提升最佳途径就是阅读开源项目源码。 如果你对TypeScript的不太了解,可以花点时间看看《认识TypeScript》 1. Storybook Storybook是一个UI组件的开发环境。它允许开发人员浏览广泛的组件目录,可以在其中测试和分析它的不同状态。它是为Vue、React、Angular和许多其他框架构建的。这对于测试组件及其边界情况特别有用。可以轻松地测试组件,而不需要理解任何业务逻辑。 Stars:60.1k Repository:https://github.com/storybookjs/storybook 2. Grafana Grafana是Grafana Labs创建的用于监视和观察的开源平台。 无论将指标存储在何处,Grafana都能很好的解析、查询和可视化数据。 可以创建各种适合需求的仪表板,并在团队中共享它们。 动态仪表板使能够创建可重复使用的仪表板,并且按指标查看日志非常简单。 Stars:40.9k Repository:https://github.com/grafana/grafana 3. TypeScript Deep Dive 由Basarat Ali Syed创建,TypeScript Deep Dive是一个学习、提升TypeScript能力的好资源。它是免费和开源的,支持12种语言。它充满了丰富的例子和提示来支持它的内容。一个有价值的明星项目! Stars:13.2k Repository:https://github.com/basarat/typescript-book 4. n8n — WorkFlow Automation Tool n8n是一个免费的工作流自动化工具,它可以帮助你通过api将所有的应用程序连接在一起,而不需要代码来共享和操作数据。n8n有170多个不同的节点来自动化你的工作流,是高度可定制的。它可以托管在你自己的服务器上,以保护你的数据安全。出色的用户界面和交互,让你可以轻松构建工作流。 Stars:13.2k Repository:https://github.com/n8n-io/n8n 5. Turbolinks Turbolinks支持更快的web应用程序导航。这个库的目标是获得单页应用程序的性能优势。当点击一个链接到另一个页面,turbollinks将处理获取页面,交换它的<body>和合并它的<head>,而不必完全刷新页面,导致增加更多的加载时间。它可以在所有现代桌面和移动浏览器上工作,还支持移动应用程序。 Stars:12.6k Repository:https://github.com/turbolinks/turbolinks 6. GraphQL Voyager GraphQL Voyager是一个交互式图形来展示GraphQL API的开发工具。由API Guru创建,可以可视化地探索GraphQL的API数据模型并与之交互。在构建数据模型时可以使用的好工具。 Stars:5.9k Repository:https://github.com/APIs-guru/graphql-voyager 7. Super Productivity Johannes Millan的《超级生产力》是一个很棒的工具,可以把你的日常任务都组织在一个地方。简而言之,超级生产力就是待办事项清单、时间跟踪器和任务管理器。你可以整合Jira、GitHub和GitLab的任务。实际上,这将帮助你节省管理多个工具的时间,并使你能够在一个仪表板上看到什么时候需要做什么。 Stars:3.5k Repository:https://github.com/johannesjo/super-productivity

优秀的个人博客,低调大师

Ubuntu 分享其全新桌面安装程序的设计

全新的 Ubuntu 安装程序的设计已经由 Canonical 设计团队公开。 我们在二月份的时候,就曾报道过 Ubuntu 正在开发全新的安装程序。而现在,Carnonical 公开了相关的设计方案,并在方案中详细的展示了全新的 Ubuntu 设置体验。改版后的 Ubuntu 安装程序利用了其服务器设置工具的相同技术,并拥有一个由 Google 开源的 Flutter 所制作的 UI。 前 Ubuntu 桌面端主管 Martin Wimpress 在二月的博客中就曾解释道:“将服务器和台式机的安装程序整合到通用技术上,这意味着我们可以在Ubuntu系列中提供一致,强大的安装体验,并将精力集中在维护单一代码库上。” 需要强调的一点是:此次提议的全新 UI 设计并没有将现有的 Ubiquity 安装程序设计完全剥离,而 Ubuntu 桌面自 2011 年以来一直在使用 Ubiquity 安装程序。 需要强调的一点是:此次提议的全新 UI 设计并没有将现有的 Ubiquity 安装程序设计完全剥离,而 Ubuntu 桌面自 2011 年以来一直在使用 Ubiquity 安装程序。 但新的外观更干净、也有更多的留白设计。它还包含了现有的 Ubiquity 安装程序所没有的新功能,例如禁用 Secure Boot、禁用 BitLocker 和测试 Active Directory 的选项。 虽然新的安装程序还没有最终推出的时间表,但我们可以想象,Ubuntu 会在下一个 LTS 版本发布前对其进行测试。这使得 Ubuntu 21.10 版本可能会成为首发新版安装程序的 Ubuntu 发行版。

优秀的个人博客,低调大师

javascript--实现购物车的实例分享

购物车对于大部分用户来说肯定都不陌生,每当双十一、双十二,我们都要把自己想要买的东西,提前加入购物车中,等到11月11号的凌晨抢时间抓紧下单。这对于用户来说,既可以管理自己想要购买的物品,又可以在购物车中进行选择。对于所有的购物用户来说都很方便、直观。 但是一些对于用户来说方便、简洁的功能,对于开发者来说会很复杂。为了给用户提供便捷的功能,其中大量复杂的业务逻辑都是开发者处理了。不过开发者在看到自己的成果之后,会很有成就感,也就不会在乎那些曾经的那些付出。 第一步,实现购物车的样式布局结构: <body> <div class="header"> <div class="container clearfix"> <div class="header-logo fl"> <a class="logo ir" href="" title="">购物车</a> </div> <div class="header-title fl" id="J_miniHeaderTitle"> <h2 style="font-size: 30px;">我的购物车</h2> </div> <div class="topbar-info fr" id="J_userInfo"> <a class="link" href="">登录</a><span class="sep">|</span><a class="link" href="">注册</a> </div> </div> </div> <div id="car" class="car"> <div class="head_row hid"> <div class="check left"> <i onclick="checkAll()">√</i></div> <div class="img left">&nbsp;&nbsp;全选</div> <div class="name left">商品名称</div> <div class="price left">单价</div> <div class="number left">数量</div> <div class="subtotal left">小计</div> <div class="ctrl left">操作</div> </div> </div> <div id="sum_area"> <div id="pay">去结算</div> <div id="pay_amout">合计:<span id="price_num">0</span>元</div> </div> <div id="box"> <h2 class="box_head"><span>买购物车中商品的人还买了</span></h2> <ul> </ul> </div> </body> 上述示例代码完成了整个购物车页面的HTML结构,在HTML结构中,我们将样式相同的模块进行提取,通过使用js循环的方式,根据商品的数量进行循环生成商品列表。如果是在与后台的交互过程中,后台工程师也会将商品组合成一个list列表给我们前端工程师。 接下来,就需要给浏览器的页面添加样式效果,这里的样式就让大家自己去完成了。循环给页面赋值,最终生成商品列表的代码如下: window.onload = function() { var aData = [{ "imgUrl": "img/03-car-01.png", "proName": " 手环4 NFC版 ", "proPrice": "229", "proComm": "1" }, { "imgUrl": "img/03-car-02.png", "proName": " AirDots真无线蓝牙耳机 ", "proPrice": "99", "proComm": "9.7" }, { "imgUrl": "img/03-car-03.png", "proName": " 蓝牙温湿度计 ", "proPrice": "65", "proComm": "1.3" }, { "imgUrl": "img/03-car-04.png", "proName": " 小爱智能闹钟 ", "proPrice": "149", "proComm": "1.1" }, { "imgUrl": "img/03-car-05.png", "proName": "电子温湿度计Pro ", "proPrice": "750", "proComm": "0.3" }, { "imgUrl": "img/03-car-06.png", "proName": "手环3 NFC版 Pro ", "proPrice": "199", "proComm": "3.3" }, { "imgUrl": "img/03-car-07.png", "proName": " 手环3 / 4 通用腕带", "proPrice": "19.9", "proComm": "1.2" }, { "imgUrl": "img/03-car-08.png", "proName": "温湿度传感器 ", "proPrice": "45", "proComm": "0.6" }, { "imgUrl": "img/03-car-09.png", "proName": "电子温湿度计Pro 3个装 ", "proPrice": "207", "proComm": "0.3" }, { "imgUrl": "img/03-car-10.png", "proName": "手环3 ", "proPrice": "199", "proComm": "7.2" } ]; var oBox = document.getElementById("box"); var oUl = document.getElementsByTagName("ul")[0]; for (var i = 0; i < aData.length; i++) { var oLi = document.createElement("li"); var data = aData[i]; oLi.innerHTML += '<div class="pro_img"><img src="' + data["imgUrl"] + '" width="150" height="150"></div>'; oLi.innerHTML += '<h3 class="pro_name"><a href="#">' + data["proName"] + '</a></h3>'; oLi.innerHTML += '<p class="pro_price">' + data["proPrice"] + '元</p>'; oLi.innerHTML += '<p class="pro_rank">' + data["proComm"] + '万人好评</p>'; oLi.innerHTML += '<div class="add_btn">加入购物车</div>'; oUl.appendChild(oLi); } } 实现的购物车静态页面效果如下: 最后,也是最复杂的部分,就是处理购物车的业务逻辑,我们要在商品上点击加入购物车,商品会自动展示在购物车模块中,加入多个商品,勾选商品前的选择复选框,可以进行核算商品的总价格,去结算。还可以删除已加入购物车的商品。 实现商品价格合计方法的代码: //进行价格合计 function getAmount() { // console.log(ys); ns = document.getElementsByClassName("i_acity"); console.log(ns); sum = 0; //选中框 document.getElementById("price_num").innerText = sum; for (y = 0; y < ns.length; y++) { //小计 amount_info = ns[y].parentElement.parentElement.lastElementChild.previousElementSibling; num = parseInt(amount_info.innerText); sum += num; document.getElementById("price_num").innerText = sum; } } 不管我们进行购物车中复选框的勾选功能,还是购物车的删除商品功能,还是进行商品的加减,都需要进行价格的核算。所以这个方法是很重要的。 最终实现的购物车的功能如下:

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册