博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
权限、列表、排序、搜索
阅读量:7086 次
发布时间:2019-06-28

本文共 1086 字,大约阅读时间需要 3 分钟。

hot3.png

在业务系统中经常要求实现:支持按数据权限控制,模糊查询,指定的列排序。目前在工作中遇到了这样的问题,使用了如下的解决方案,仅供参考。

 

权限控制,该项目的数据权限主要依靠部门组织进行控制,当然还有一些例外。实现的主要方法:

将权限分解为小段,使用redis进行交、并、差的集合操作。使用redis缓存提高性能,在redis内实现分页。

 其实是模拟了数据库查询的方式,将数据库需要做的任务交给了redis,理由是如果使用数据库进行处理,则会拼接非常复杂的SQL查询语句。数据库索引的效果大打折扣。另外因为交、并、差操作由代码控制,可以有更大的优化空间。缺点是要维护缓存和数据库的一致性,以及交、并、差的操作需要应用控制,对开发有一定的要求。

模糊查询需要支持大部分字段(类似文件类型字段除外)。我们选择使用ElasticSearch进行全文索引,这里有一个点是,搜索要支持的和原文档不一定一致,也就是跨文档查询的问题,导至文档和数据库并不完全一致。

按指定的列排序,目前没有实现,主要是研究了技术方案,主要有两个技术方案。

●使用redis 排序。

    使用hash结构保存数据,在使用对应的字段进行排序。缺点是不能支持多字段排序,且需要在查询的时候解析文档、对性能有一定的影响。

●使用排序

   使用ElasticSearch排序可以多列排序,需要对Es 的mapping调整,要实现全文搜索的同时可以按值排序。在允许用户自定义字段时(数据的字段是不完全相同),对同步的实时性有影响。以及对数据的一致性有更高的要求。

mapping

{  "title": {    "type": "string", "boost": 9, "analyzer": "autocomplete", "search_analyzer":"standard",    "fields": {      "raw": {        "type": "string",        "index": "not_analyzed"      }    }  }}

search & sort

{    "sort": [{        "title.raw": {"order": "desc"}    }],    "query":{        "term": { "title": "pagos" }    }}

个人建议使用ElasticSearch排序,对性能的影响较小,且可以多列排序。

 

 

 

 

转载于:https://my.oschina.net/u/2563693/blog/870314

你可能感兴趣的文章
java在线预览txt、word、ppt、execel,pdf代码
查看>>
ORA-100501: non-ORACLE exception
查看>>
不安装Oracle客户端也能使用PL/SQL
查看>>
我的友情链接
查看>>
FineReport中如何自定义登录界面
查看>>
元素始终居浏览器窗口中间的位置
查看>>
Linux的常用目录(Ubuntu)
查看>>
linux 下更改文件名编码方式
查看>>
浏览器内核相关
查看>>
Completely Uninstall Node.js from Mac OS X
查看>>
Redis数据库学习(1)
查看>>
rsync+inotify配置
查看>>
Android学习笔记系列
查看>>
Maven学习总结(四)——Maven核心概念
查看>>
linux挂载ipsan服务器
查看>>
2013-05-25
查看>>
innodb_force_recovery强制修复MySQL异常关闭问题
查看>>
如何将Windows XP SP3改成SP2
查看>>
我的友情链接
查看>>
实战MYSQL 8.0.12 主主复制配置过程
查看>>