MAKESOFT开发者社区
最新推荐文章
  • 发动态
  • 发帖子
  • 发文章
登录
首页
分类
  • 发动态
  • 发帖子
  • 发文章
最新
推荐
文章
消息
登录
最新
推荐
  • 最新
  • 推荐
  • 前端
  • 后端
  • 开源
  • 架构
  • DevOps
  • 数据库
  • 移动
  • webRtc
  • 资源
  • 分享
  • 无聊
  • 反馈
  • 提问
  • 热图
  • 交流
  • YYDS
    YYDS YYDS
    发布于3天前

    MongoDB 清理数据

    move({}) 3.删除集合 >db.user.drop() 4.删除整个数据库 >show dbs; >db.user.getDB() >db.dropDatabase() 删除文档是永久性的,不能撤销,也不能恢复的。因此,在执行remove()函数前先用find()命令来查看下是否正确。 二、回收remove的磁盘空间 mongodb删除集合后磁盘空间不释放,用db.repairDatabase()去修复才能释放。但是在修复的过程中如果出现了非正常的mongodb的挂掉,再次启动时启动不了的,需要先修复才可以,可以利用./mongod --repair --dbpath=/data/mongo/,如果你是把数据库单独的放在一个文件夹中指定dbpath时就指向要修复的数据库就可以,修复可能要花费很长的时间,在使用db.repairDatabase()去修复时一定要停掉读写,并且mongodb要有备机才可以,不然千万不要随便使用db.repairDatabase()来修复数据库,切记。 回收磁盘空间可以参考:http://blog.csdn.net/mchdba/article/details/8894344 三、mongodb占用空间过大的原因,在官方的FAQ中,提到有如下几个方面: 1、空间的预分配:为避免形成过多的硬盘碎片,mongodb每次空间不足时都会申请生成一大块的硬盘空间,而且申请的量从64M、128M、256M那样的指数递增,直到2G为单个文件的最大体积。随着数据量的增加,你可以在其数据目录里看到这些整块生成容量不断递增的文件。 2、字段名所占用的空间:为了保持每个记录内的结构信息用于查询,mongodb需要把每个字段的key-value都以BSON的形式存储,如果value域相对于key域并不大,比如存放数值型的数据,则数据的overhead是最大的。一种减少空间占用的方法是把字段名尽量取短一些,这样占用空间就小了,但这就要求在易读性与空间占用上作为权衡了。我曾建议作者把字段名作个index,每个字段名用一个字节表示,这样就不用担心字段名取多长了。但作者的担忧也不无道理,这种索引方式需要每次查询得到结果后把索引值跟原值作一个替换,再发送到客户端,这个替换也是挺耗费时间的。现在的实现算是拿空间来换取时间吧。 3、删除记录不释放空间:这很容易理解,为避免记录删除后的数据的大规模挪动,原记录空间不删除,只标记“已删除”即可,以后还可以重复利用。 4、可以定期运行db.repairDatabase()来整理记录,但这个过程会比较缓慢。 修复master过程: 1、在master做db.repairDatabase(),不起作用; 2、停止slave的同步; 3、对slave作mongodump,备份数据; 4、对master作mongostore,把备份数据恢复,使用–drop参数可以先把原表删除。 5、恢复slave的同步。 注:对于需要定期清理的数据库如:保留定期的业务系统日志数据等,可以采用国定大小集合capped collection,限制数据的大小或条数,永远保留最新的数据。 参考: http://docs.mongodb.org/manual/tutorial/remove-documents/ http://docs.mongodb.org/manual/tutorial/expire-data/ http://docs.mongodb.org/manual/tutorial/remove-indexes/ http://docs.mongodb.org/manual/core/capped-collections/ ———————————————— 版权声明:本文为CSDN博主「slimina」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/zhu_tianwei/article/details/44514851
    赞
    评论
    浏览 25
    数据库
  • 一言难尽
    一言难尽 一言难尽
    发布于2021-09-27 18:11:32

    MongoDB序列化ObjectId成字符串

    来防止分布式系统生成id时冲突的问题,保证每台机器生成的识别码不同,进程号保证多线程情况下生成的id不同。 ObjectId在java程序中是对象类型,示例如下: { id: { "time": 1494233455000, "timestamp": 1494233455, "date": 1494233455000, "new": false, "timeSecond": 1494233455, "inc": -125534200, "machine": -1248386109 } } 有时需要将ObjectId的序列化做处理,将ObjectId直接序列化为字符串。 在接口返回数据前统一处理序列化问题。自定义类实现ResponseBodyAdvice接口,重写beforeBodyWrite方法,自定义序列化方法。 package net.pushi.neo4jdata.dataParser.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializeConfig; import org.bson.types.ObjectId; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; @ControllerAdvice public class MyResponseBodyAdvice implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) { return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { SerializeConfig config = new SerializeConfig(); //解决mongdb id序列化问题 config.put(ObjectId.class, new ObjectIdJsonSerializer()); return JSONObject.parse(JSON.toJSONString(body, config)); } } 然后实现一个ObjectIdJsonSerializer package net.pushi.neo4jdata.dataParser.util; import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.ObjectSerializer; import com.alibaba.fastjson.serializer.SerializeWriter; import org.bson.types.ObjectId; import java.io.IOException; import java.lang.reflect.Type; public class ObjectIdJsonSerializer implements ObjectSerializer { @Override public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType) throws IOException { SerializeWriter out = serializer.getWriter(); if (object == null) { serializer.getWriter().writeNull(); return; } out.write("\"" + ((ObjectId) object).toString() + "\""); } } 这样处理后接口返回的id将变成字符串类型。 { "id":"5ae078ada0f091000be702b8" } 对于Date类型的输出默认为时间戳格式,我们可以自定义输出为格式化字符串,这样可以免去在前端格式化处理。需要在MyResponseBodyAdvice 中注册DateJsonSerializer 。 package net.pushi.neo4jdata.dataParser.util; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.ObjectSerializer; import com.alibaba.fastjson.serializer.SerializeWriter; import java.io.IOException; import java.lang.reflect.Type; import java.util.Date; public class DateJsonSerializer implements ObjectSerializer { @Override public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType) throws IOException { SerializeWriter out = serializer.getWriter(); if (object == null) { serializer.getWriter().writeNull(); return; } out.write("\"" + DateUtil.format(((Date)object),"yyyy-MM-dd: HH:mm:ss") + "\""); } }
    赞
    评论
    浏览 361
    数据库
  • 源
    源 源
    发布于2021-09-23 09:50:47

    关于mysql安装过程中命令mysqld --initialize --console出错的解答

    Data # 允许最大连接数 max_connections=200 # 允许连接失败的次数。 max_connect_errors=10 # 服务端使用的字符集默认为utf8mb4 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 #mysql_native_password default_authentication_plugin=mysql_native_password [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8mb4 输入命令mysqld --initialize --console时会弹出如下错误 这里只需要更改前面步骤中插入的文件my.ini里面MySQL的安装目录和MySQL的数据库存放目录,改成自己的MySQL存放路径即可
    赞 2
    评论 2
    浏览 386
    数据库
  • 源
    源 源
    发布于2021-09-22 23:39:39

    聚合查询及相关语法——Neo4j

    n: findList,多标签查询指定关系节点 * @param map: * @return: java.util.Map * @Author: hsy * @Date: 2020/12/12 */ public Map findList(Map<String,Object> map){ String cypher; //Neo4j执行语句 Map<String, Object> relation; //返回结果集 List<String> types = new ArrayList<>(); //关系类型集(type) if (map.containsKey("event_type") && null != map.get("event_type") && !"".equals(map.get("event_type"))){ Map<String, Object> filter = new HashMap<>(); filter.put("event_type",map.get("event_type")); List<Map<String, Object>> relationTypes = mongoDBService.findRelationTypes(filter); for (Map<String, Object> relationType:relationTypes){ types.add(relationType.get("type").toString()); } } types = addMark(types); if (map.containsKey("labels") && null != map.get("labels") && !"".equals(map.get("labels")) && map.get("labels") instanceof List){ //有节点标签条件(List) List<String> labels = (List<String>) map.get("labels"); labels = addMark(labels); if (types.size()>0){ //有关系类别条件 cypher = "match p=(n)-[r]-(m) where any(label in labels(n) where label in "+labels+") and type(r) in "+types+" return p"; //cypher = "match p=(n)-[r]-(m) where any(label in labels(n) where label in "+labels+") and type(r) in "+types+" return n,r,m"; relation = DatabaseUtil.deepQuery(cypher); }else { //无关系类别条件 cypher = "match p=(n)-[r]-(m) where any(label in labels(n) where label in "+labels+") return p"; relation = DatabaseUtil.deepQuery(cypher); } if (!relation.containsKey("nodes") || null == relation.get("nodes") || "".equals(relation.get("nodes")) || (relation.get("nodes") instanceof Set && !(0<((Set) relation.get("nodes")).size()))){ //三元组查询结果为空,则返回节点 cypher = "match (n) where any(label in labels(n) where label in "+labels+") return n"; List<Map<String, Object>> nodes = DatabaseUtil.nodeToMap(cypher); relation.put("nodes",nodes); relation.put("relationships",new ArrayList<Map<String, Object>>()); } }else if (map.containsKey("labels") && null != map.get("labels") && !"".equals(map.get("labels")) && map.get("labels") instanceof String){ //有节点标签条件(String) if (types.size()>0){ //有关系类别条件 cypher = "match p=(n)-[r]-(m) where any(label in labels(n) where label = \'"+map.get("labels")+"\') and type(r) in "+types+" return p"; relation = DatabaseUtil.deepQuery(cypher); }else { //无关系类别条件 cypher = "match p=(n)-[r]-(m) where any(label in labels(n) where label = \'"+map.get("labels")+"\') return p"; relation = DatabaseUtil.deepQuery(cypher); } if (!relation.containsKey("nodes") || null == relation.get("nodes") || "".equals(relation.get("nodes")) || (relation.get("nodes") instanceof Set && !(0<((Set) relation.get("nodes")).size()))){ //三元组查询结果为空,则返回节点 cypher = "match (n) where any(label in labels(n) where label = \'"+map.get("labels")+"\') return n"; List<Map<String, Object>> nodes = DatabaseUtil.nodeToMap(cypher); relation.put("nodes",nodes); relation.put("relationships",new ArrayList<Map<String, Object>>()); } }else { //无节点标签条件 if (types.size()>0){ //有关系类别条件 cypher = "match p=(n)-[r]-(m) where type(r) in "+types+" return p"; relation = DatabaseUtil.deepQuery(cypher); }else { //无关系类别条件 cypher = "match p=(n)-[r]-(m) return r limit 500"; relation = DatabaseUtil.deepQuery(cypher); } if (!relation.containsKey("nodes") || null == relation.get("nodes") || "".equals(relation.get("nodes")) || (relation.get("nodes") instanceof Set && !(0<((Set) relation.get("nodes")).size()))){ //三元组查询结果为空,则返回节点 cypher = "match (n) return n limit 50"; List<Map<String, Object>> nodes = DatabaseUtil.nodeToMap(cypher); relation.put("nodes",nodes); relation.put("relationships",new ArrayList<Map<String, Object>>()); } } return relation; } /** * @Description: deepQuery,深度查询返回三元组方法 * @param string: 查询语句 * @return: java.util.Map<java.lang.String,java.lang.Object> * @Author: hsy * @Date: 2020/12/12 */ public static Map<String, Object> deepQuery(String string){ Set<Map<String, Object>> nodeList = new HashSet<>(); Set<Map<String, Object>> relationshipList = new HashSet<>(); Map<String, Object> relation = new HashMap<>(); Result result = DatabaseUtil.neo4jExecute(string); Iterable<Map<String, Object>> it = result.queryResults(); for (Map<String, Object> data : it){ for (Map.Entry<String, Object> entry : data.entrySet()){ Object object = entry.getValue(); if (object instanceof InternalPath){ InternalPath IP = (InternalPath) object; //节点 Iterable<Node> nodes = IP.nodes(); for (Node node : nodes){ Map<String, Object> asMap = node.asMap(); nodeList.add(setProperty(setBasePropertyNode(node),asMap)); } //关系 Iterable<Relationship> relationships = IP.relationships(); for (Relationship relationship : relationships){ Map<String, Object> asMap = relationship.asMap(); relationshipList.add(setProperty(setBasePropertyRelation(relationship),asMap)); } }else if (object instanceof NodeModel){ //节点 NodeModel nodeModel = (NodeModel) object; nodeList.add(setPropertyNodeModel(nodeModel)); }else if (object instanceof RelationshipModel){ //关系 RelationshipModel relationshipModel = (RelationshipModel) object; relationshipList.add(setPropertyRelationshipModel(relationshipModel)); } } } relation.put("nodes",nodeList); relation.put("relationships",relationshipList); return relation; } /** * @Description: relationToMap,关系模型===》Map * @param string: * @return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>> * @Author: hsy * @Date: 2020/12/12 */ public static List<Map<String, Object>> relationToMap(String string){ Set<Map<String, Object>> relationships = new HashSet<>(); Result resultRelations = DatabaseUtil.neo4jExecute(string); ArrayList<LinkedHashMap<String, ArrayList<RelationshipModel>>> listRelations = (ArrayList)resultRelations.queryResults(); for (LinkedHashMap<String, ArrayList<RelationshipModel>> linkedHashMap:listRelations){ for (ArrayList<RelationshipModel> value:linkedHashMap.values()){ for (RelationshipModel relationshipModel:value){ relationships.add(DatabaseUtil.setPropertyRelationshipModel(relationshipModel)); } } } return new ArrayList<>(relationships); } /** * @Description: nodeToMap,节点模型===》Map * @param string: * @return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>> * @Author: hsy * @Date: 2020/12/12 */ public static List<Map<String, Object>> nodeToMap(String string){ Set<Map<String, Object>> nodes = new HashSet<>(); Result resultNode = DatabaseUtil.neo4jExecute(string); ArrayList<LinkedHashMap<String, NodeModel>> listNodes = (ArrayList)resultNode.queryResults(); for (LinkedHashMap<String,NodeModel> linkedHashMap:listNodes){ for (NodeModel value:linkedHashMap.values()){ nodes.add(DatabaseUtil.setPropertyNodeModel(value)); } } return new ArrayList<>(nodes); } 其他相关操作语法: //创建节点 create (n:`地图`{name_chs:"中东",名称:"中东",经度:"48.00",纬度:"12.00"}) //模糊查询 MATCH (n:`舰艇`) where n.别名=~'.*埃塞克斯号.*' RETURN n //查询与节点name为长沙有关的节点和关系 MATCH p=(n:`地图`{名称:'长沙市'})-[*1..1]-() return p limit 99 //创建关系(需要APOC包) UNWIND {list} as row MATCH (startNode) WHERE startNode._id = row.start WITH row,startNode MATCH (endNode) WHERE endNode._id = row.end CALL apoc.create.relationship(startNode, row.type, row.props, endNode) yield rel RETURN count(*) //根据name创建关系 UNWIND {list} as row MATCH (startNode) WHERE startNode.name = row.startNodeName WITH row,startNode MATCH (endNode) WHERE endNode.name = row.endNodeName Merge (startNode)-[rel:`TargetRelation`]->(endNode) SET rel += row.props //根据id创建关系 UNWIND {rows} as row MATCH (startNode) WHERE ID(startNode) = row.startNodeId WITH row,startNode MATCH (endNode) WHERE ID(endNode) = row.endNodeId CREATE (startNode)-[rel:`TargetRelation`]->(endNode) SET rel += row.props //创建指定关系 match(a),(b) where id(a)={0} and id(b)={1} create c= (a)-[r:TargetRelation{number:{2},startTarget:{3},relationType:{4},endTarget:{5},createTime:{6}}]->(b) return c //节点多标签查询 match p=(n)-[r]-(m) where any(label in labels(n) where label in ['X1体系','X2体系']) return n //关系多类型查询 match p=(n)-[r]-(m) where type(r) in ['指挥关系','备份关系'] return p //节点标签,关系类型联合查询 match p=(n)-[r]-(m) where any(label in labels(n) where label in ['X1体系']) and type(r) in ['指挥关系','上报关系'] return p 社区版备份或者换库 //数据备份到文件 neo4j-admin dump --database=graph.db --to=D:/Neo4j/neo4j-community-3.5.7/data/dump/graph.dump //备份的数据文件导入 bin/neo4j-admin load --from=D:/Neo4j/neo4j-community-3.5.7/data/dump/graph.dump --database=graph.db --force
    赞
    评论
    浏览 351
    数据库
  • 源
    源 源
    发布于2021-09-22 23:13:37

    neo4j常用命令收藏

    {list} as row MATCH (startNode) WHERE startNode.name = row.startNodeName WITH row,startNode MATCH (endNode) WHERE endNode.name = row.endNodeName Merge (startNode)-[rel:`TargetRelation`]->(endNode) SET rel += row.props //根据id创建关系 UNWIND {rows} as row MATCH (startNode) WHERE ID(startNode) = row.startNodeId WITH row,startNode MATCH (endNode) WHERE ID(endNode) = row.endNodeId CREATE (startNode)-[rel:`TargetRelation`]->(endNode) SET rel += row.props //创建指定关系 match(a),(b) where id(a)={0} and id(b)={1} create c= (a)-[r:TargetRelation{number:{2},startTarget:{3},relationType:{4},endTarget:{5},createTime:{6}}]->(b) return c //创建节点 create (n:`地图`{name_chs:"中东",名称:"中东",经度:"48.00",纬度:"12.00"}) //模糊查询 MATCH (n:`舰艇`) where n.别名=~'.*埃塞克斯号.*' RETURN n 社区版备份或者换库 1、数据备份到文件 neo4j-admin dump --database=graph.db --to=D:/Neo4j/neo4j-community-3.5.7/data/dump/graph.dump 2、备份的数据文件导入 bin/neo4j-admin load --from=D:/Neo4j/neo4j-community-3.5.7/data/dump/graph.dump --database=graph.db --force
    赞
    评论
    浏览 329
    数据库
签到
0
立即签到
公告

MAKESOFT开发者社区 www.makesoft.cn,一个交流分享互助平台,帮助大家打造个人品牌,积累资源,知识分享变现,助力职业发展。 由 Springboot+mybatis-plus 微服务框架,希望大家喜欢。开源地址http://gitee.com

积分排行
  • YYDS
    YYDS

    0 帖子 • 0 评论

    16
  • 怡
    怡然

    1 帖子 • 1 评论

    12
  • 测
    测试

    1 帖子 • 1 评论

    7
  • 一言难尽
    一言难尽

    0 帖子 • 0 评论

    5
  • S
    sosoalone

    0 帖子 • 0 评论

    5
  • 编程笔记
    编程笔记

    0 帖子 • 0 评论

    2
  • 吓
    吓死蚊子

    0 帖子 • 0 评论

    1
  • kidd
    kidd

    0 帖子 • 0 评论

    1
  • 滔滔
    滔滔

    0 帖子 • 0 评论

    1
  • 薄情
    薄情

    0 帖子 • 0 评论

    1
友情链接 查看更多>>
  • 别摸网

    别摸网是一个年轻人的交流社区,我们交流分享想法、发现生活乐趣、探索有趣好玩的事情!

关于 标签 友链
© 2021 Powered by biemo-cloud

发表言论时,遵守当地法律法规。本站部分图片、文章来源于网络,版权归原作者所有,如有侵权,请与我联系删除。

湘ICP备14016160号-1