数据迁移

Mongodb中Sharding集群

半城伤御伤魂 提交于 2019-12-06 09:54:39
随着mongodb数据量的增多,可能会达到单个节点的存储能力限制,以及application较大的访问量也会导致单个节点无法承担,所以此时需要构建集群环境,并通过sharding方案将整个数据集拆分成多个更小的chunk,并分布在集群中多个mongod节点上,最终达到存储和负载能力扩容、压力分流的作用。在sharding架构中,每个负责存储一部分数据的mongod节点称为shard(分片),shard上分布的数据块称为chunk,collections可以根据“shard key”(称为分片键)将数据集拆分为多个chunks,并相对均衡的分布在多个shards上。 1)sharding模式将应用的数据访问操作分散到多个shard上,每个shard只承担一部分请求;比如read操作只需要访问持有数据的shard节点即可。 2)sharding模式也减少每个shard节点的数据存储量。 上图为sharded cluster的拓扑结构,它包含三个组件:shards、config servers和query routers: 1)Shards:存储节点,为了提高可用性和数据一致性,通常每个shard是一个“replica set”结构。 2)Query routers:查询路由节点,即mongos节点,mongos接收客户端请求

ConcurrentHashMap源码走读

元气小坏坏 提交于 2019-12-06 08:41:50
目录 ConcurrentHashMap源码走读 简介 放入数据 容器元素总数更新 容器扩容 协助扩容 遍历 ConcurrentHashMap源码走读 简介 在从JDK8开始,为了提高并发度, ConcurrentHashMap 的源码进行了很大的调整。在JDK7中,采用的是分段锁的思路。简单的说,就是 ConcurrentHashMap 是由多个 HashMap 构成。当需要进行写入操作的时候,会寻找到对应的 HashMap ,使用 synchronized 对对应的 hashmap 加锁,然后执行写入操作。显然,并发程度就取决于 HashMap 个数的多少。而在JDK8中换了一种完全不同的思路。 首先,仍然是使用 Entry[] 作为数据的基本存储。但是锁的粒度被缩小到了数组中的每一个槽位上,数据读取的可见性依靠 volatile 来保证。而在尝试写入的时候,会将对应的槽位上的元素作为加锁对象,使用 synchronized 进行加锁,来保证并发写入的安全性。 除此之外,如果多个Key的 hashcode 在取模后落在了相同的槽位上,在一定数量内(默认是8),采用链表的方式连接节点;超过之后,为了提高查询效率,会将槽位上的节点转为使用红黑树结构进行存储。 还有一个比较大的改变在于当进行扩容的时候,除了扩容线程本身,如果其他线程识别到了扩容进行中,则会尝试协助扩容。

Redis Cluster

陌路散爱 提交于 2019-12-06 03:45:06
Redis Cluster 呼唤集群 数据分布 搭建集群 集群伸缩 客户端路由 集群原理 故障转移 开发运维常见问题 呼唤集群 1. 并发量 2. 数据量 3. 网络流量 解决办法 分布式:简单的认为加机器 集群:规模化需求 并发量:OPS 数据量:”大数据” 数据分布 分布式数据库-数据分区 顺序分区和哈希分区 顺序分布 哈希分布(例如节点取模) 数据分布对比 分布方式 特点 典型产品 哈希分布 数据分散度高、键值分布业务无关、无法顺序访问、支持批量操作 一致性哈希Memcache、Redis Cluster、其他缓存产品 顺序分布 数据分散度易倾斜、键值业务相关、可顺序访问、支持批量操作 Big Table、HBase 哈希分布 节点取余分区 一致性哈希分区 虚拟槽分区 多倍扩容 客户端分片:哈希+取余 节点伸缩:数据节点关系变化,导致数据迁移 迁移数量和添加节点数量有关:建议翻倍扩容 一致性哈希 扩容 客户端分片:哈希+顺时针(优化取余) 节点伸缩:只影响邻近节点,但是还是有数据迁移 翻倍伸缩:保证最小迁移数据和负载均衡 虚拟槽分区 预设虚拟槽:每个槽映射一个数据子集,一般比节点数大 良好的哈希函数:例如CRC16 服务端管理节点、槽、数据:例如Redis Cluster 搭建集群-基本架构 单机架构 分布式架构 Redis Cluster架构 节点 meet 指派槽 复制

深度学习-迁移学习笔记

怎甘沉沦 提交于 2019-12-06 03:28:45
1.什么是迁移学习   迁移学习(Transfer Learning)是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。找到目标问题的相似性,迁移学习任务就是从相似性出发,将旧领域(domain)学习过的模型应用在新领域上。 2.为什么需要迁移学习    使用深度学习技术解决问题的过程中,最常见的障碍在于,因为模型有大量的参数需要训练,因此需要海量训练数据作支撑。虽然有大量的数据,但往往都是没有标注的,无法训练机器学习模型。人工进行数据标定太耗时。   在面对某一领域的具体问题时,通常可能无法得到构建模型所需规模的数据。普通人无法拥有庞大的数据量与计算资源。因此需要借助于模型的迁移。   借助迁移学习,在一个模型训练任务中针对某种类型数据获得的关系也可以轻松地应用于同一领域的不同问题。 3.迁移学习的基本问题有哪些? 基本问题主要有3个: How to transfer: 如何进行迁移学习?(设计迁移方法) What to transfer: 给定一个目标领域,如何找到相对应的源领域,然后进行迁移?(源领域选择) When to transfer:

showDoc数据迁移-无数据库权限

爷,独闯天下 提交于 2019-12-06 02:38:33
公司与另外一个公司合作做项目,使用对方的showdoc管理接口文档,由于网络不好,想着干脆自己爬到本地搭个服务器。说干就干,走起! 1.准备工作 首先showdoc官网了解了一圈showdoc的内容,在本地服务器上部署了一套。使用的是apache2。 数据库是默认的sqlite,数据库文件为:Sqlite/下的showdoc.db.php文件 然后招了个sqllite的访问客户端,Navicat 12 for SQLite ,强烈推荐!使用方式和Navicat for Mysql基本一样,非常方便。 使用下载地址: 链接: https://pan.baidu.com/s/1p4F8D63xlcFS86D_K0_RJQ 提取码:w79w 2.爬取数据 先打开一个页面。 查看其页面源码的结构后发现,左侧部分是一个 菜单,菜单的url非常容易获取。 这样,我们基本上就可以使用jsoup解析了,具体解析的过程就不放出来了。 需要注意的是showdoc的版本比较低,我没有看到具体的版本号,但是我后部署的新版本无法使用该方法获取。 这里就说一下具体的思路: 1.先解析一个url,获取document中的菜单列表,获取页面的url 2.由于显示页面只是展示html数据,没有markdown的文本,如果需要获取markdowm有两个方法: 如果有用户名密码。直接使用jsoup

数据迁移的错误之二

只谈情不闲聊 提交于 2019-12-05 20:39:50
HINT: Add or change a related_name argument to the definition for 'User.groups' or 'User.groups '. user.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with rev erse accessor for 'User.user_permissions'. HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'U ser.user_permissions'. 解决方案: 需要在setting中重载AUTH_USER_MODEL AUTH_USER_MODEL = 'users.UserProfile' users:你的app UserProfile:model 来源: https://www.cnblogs.com/demiao/p/11945959.html

汽车之家社区从传统商业数据库到开源分布式数据库的架构变迁

╄→гoц情女王★ 提交于 2019-12-05 20:34:57
一、项目介绍 汽车之家社区于 2005 年上线,作为之家最老的业务之一,十四年来沉淀了亿级帖子、十亿级回复数据,目前每天有千万级 DAU、亿级的访问量,接口日均调用量 10亿+次 。期间经历过架构升级重构、技术栈升级等,但其数据始终存放在SQL Server中,随着数据的不断递增,我们在使用SQL Server 数据库方面遇到了很多瓶颈,以至于我们不得不寻找一个新的数据库替换方案。 二、使用SQL Server遇到的瓶颈 随着业务的不断扩大,汽车之家社区的访问量和发表量不断上涨,遇到的数据库问题也越来越多,下面列举两个必须很快要解决掉的问题: 历史上,之家社区回复库采用了分库分表的设计,用以解决SQL Server单表过大的时候性能下降等问题。时至今日,回复库有100+个库、1000+张表(根据帖子ID分库分表)。这本身并没有问题,代码写好了,数据该写哪里写哪里,该读哪里读哪里。但是随着应用的发展、需求的变化,我们发现在实现某些需求时,分库分表的结构难以满足。我们需要数据逻辑上在一张表里。 近些年来,随着业务加速成长,数据量突飞猛进,而硬盘容量是有限的,每台服务器上能扩展的硬盘数量也是有限的。致使每隔一段时间都要增加更大容量的存储服务器来应对,而且这个事情一开始是很复杂的,涉及到很多关联项目,即便到现在我们轻车熟路了,每次换服务器的时候依然需要关注它,并且大容量数据库服务器价格昂贵

多平台向Postgresql 迁移

六眼飞鱼酱① 提交于 2019-12-05 03:13:50
最近有个工作要把 一个SqlServer 迁移到 Postgresql 平台上,上网搜了搜,EnterpriseDB在这块做了很多工作, EnterpriseDB 的 Postgres Plus Advanced Server管理工具中有一个 mogiration toolkit工具。 这里安装的是9.2版本。安装后在 bin 目录下有个edb-migrationtoolkit.jar,这是这个工具的主要程序,通过java 启用jar包进行迁移。其中涉及到三块: 1.bin目录下 edb-migrationtoolkit.jar 迁移主程序 2. bin目录下runMTK.bat 迁移命令脚本,linux下是runMTK.sh,内容如下,这里有些改动 @echo off @REM ---------------------------------------------------------------------------- @REM -- @REM -- Copyright (c) 2004-2012 - EnterpriseDB Corporation. All Rights Reserved. @REM -- @REM ----------------------------------------------------------------------------

(四)Flask 学习 —— 数据库

风格不统一 提交于 2019-12-05 00:57:14
数据库 回顾 在前面的章节中,我们已经创建了登录表单,完成了提交以及验证。在这篇文章中,我们要创建我们的数据库,并设置它,这样我们就可以保存我们的用户。 我们接下来讲述的正是我们上一章离开的地方,所以你可能要确保应用程序 microblog 正确地安装和工作。 从命令行中运行 Python 脚本 在这一章中我们会写一些脚本用来简化数据库的管理。在我们开始编写脚本之前,先来温习下 Python 脚本如何在命令行中执行。 如果你使用 Linux 或者 OS X 系统的话,脚本必须给予一定的权限,像这样: chmod a+x script.py 脚本中有一个 shebang ,它指明应该使用的解释器。一个脚本如果被赋予了执行权限并且有一个 shebang 行能够被简单地像这样执行: ./script.py <arguments> 在 Windows 上,上面的操作是没有作用的,相反你必须提供脚本作为选择的 Python 解释器的一个参数: flask\Scripts\python script.py <arguments> 为了避免键入 Python 解释器的路径,你可以把 microblog/flask/Scripts 加入到系统路径中,但是务必让它在你的 Python 解释器之前。 从现在起,在本教程中的 Linux / OS X 的语法将用于缩写。如果你是在 Windows 上

使用CoreData的轻量级自动数据迁移

核能气质少年 提交于 2019-12-04 19:09:54
使用IOS的CoreData进行存储很方便,CoreData已经帮我们做了很多基础的工作,一般情况下没必要自己操作数据库了。 在开发中修改了实体模型,可能会遇到schema incompatibility的错误,这是因为修改了数据结构,要进行数据迁移。 其实很多简单的情况,不用这么麻烦,Coredata提供了轻量级的自动数据迁移,比如以下三个情况会自动进行: 1.简单的增加一个字段 2.把一个必填字段改为可选字段 3.把可选字段改为必填字段(但一定要定义默认值) 怎样开启自动迁移的功能?分三步 1.在App delegate类里修改persistentStoreCoordinator方法 - (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (__persistentStoreCoordinator != nil) { return __persistentStoreCoordinator; } NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"WorkXP.sqlite"]; NSError *error = nil; __persistentStoreCoordinator = [