转自煎蛋网 网址:http://jandan.net 我们知道照片,视频,音乐和其他数码文件都是1和0组成的——但是这些数据有没有重量呢?需要多少G的数据才会让我们的iPhone重一点呢? 智能手机里的闪存跟笔记本和台式机的机械硬盘是不一样的。实际上,固态硬盘要快得多也高级得多。随着成本的降低,越来越多的电脑也装上了固态硬盘。 加州大学伯克利分校的计算机科学家John D. 那是因为闪存是通过俘获电子区分1和0,虽然电子的数量不会改变,但是一旦它们被俘获(或者数据被储存),它们就有了更高的能量等级,因此重量也更大。 回到我们的问题,储存多少数据才会让我们能真正感觉到iPhone重了一点呢?而不只是微观上的变化。 根据韦伯定律(表明心理量和物理量之间关系的定律),人类可以感知的两个物体间的重量差距是5%以上。 这个算得很粗略,但至少给我们一个大概的数字:要得到7克的重量,大约需要5.7*1000^6T的数据。
老生长谈,爬虫的三步走: 模拟登陆 数据下载 数据存储 今天就做了这第三步。作为小程序的数据来源。 建数据库 建库建表。 ? 要注意的问题: infoid 选择自动递增 contents的文本信息较多,应选择text 数据库链接 Python中先导入PyMySQL,链接语句(私密信息已做处理): connection ,选择自己要插入数据的表。 插入数据 数据好插入,复杂的地方在于如何插入自己想要的数据,剔除掉不想要的数据。简单的几个函数,这里还是要再次提及,之前有使用过,但是又忘了。。。 延时还是要做的,好像是之前访问数据库太快导致中断??? 需要注意的是,表里列的名称要写对,以及VALUES的个数,还有后面要插入的数据与之前的一一对应。 基本这样就OK了。 ?
一站式解决数据备份、共享、大数据处理、线上数据托管的云端存储服务,新用户享四重好礼
数据存储器主要是将网页解析器解析出来的数据对象保存到不同的,而对于本次爬取的手机商品,数据对象是下面一个Page对象: /** * 网页对象,主要包含网页内容和商品数据 */ public class (Page page); } 然后基于此开发了MySQL的存储实现类、HBase的存储实现类还有控制台的输出实现类,如MySQL的存储实现类,其实就是简单的数据插入语句: /** * 使用dbc数据库连接池将数据写入 当然,至于要将数据存储在哪个地方,在初始化爬虫程序时,是可以手动选择的: // 3.注入存储器 iSpider.setStore(new HBaseStoreImpl()); 目前还没有把代码写成可以同时存储在多个地方 不过需要注意的是,一旦决定需要循环重复爬取数据,则在设计存储器实现时需要考虑重复数据的问题,即重复数据应该是更新操作,目前在我设计的存储器不包括这个功能,有兴趣的朋友可以自己实现,只需要在插入数据前判断数据库中是否存在该数据即可 6 实战:爬取京东、苏宁易购全网手机商品数据 因为前面在介绍这个系统的时候也提到了,我只写了京东和苏宁易购的网页解析器,所以接下来也就是爬取其全网的手机商品数据。
//深拷贝,被拷贝的属性是引用类型,并且是数组的情况 var ca = ["a",2,true]; var ne = {name:"zhangsan",age:15,other:ca}; pr = {}; for(var i in ne){ if(typeof ne[i] ==="object"){ pr[i]=[];//必须先声明是一个数组
数据缓存 通过《网络数据采集和解析》一文,我们已经知道了如何从指定的页面中抓取数据,以及如何保存抓取的结果,但是我们没有考虑过这么一种情况,就是我们可能需要从已经抓取过的页面中提取出更多的数据,重新去下载这些页面对于规模不大的网站倒是问题也不大 使用NoSQL Redis简介 Redis是REmote DIctionary Server的缩写,它是一个用ANSI C编写的高性能的key-value存储系统,与其他的key-value存储系统相比 Redis支持数据的持久化(RDB和AOF两种方式),可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供hash、list、set,zset、hyperloglog、geo等数据类型。 配置底层有多少个数据库。 配置Redis的持久化机制 - RDB。 配置Redis的持久化机制 - AOF。 配置访问Redis服务器的验证口令。
,但是这两个方法同SharedPreferences一样,只能在手机内存卡的指定目录建立文件,因此在使用上仍然有一定的局限性。 Environment.getExternalStorageDirectory().getCanonicalPath() + "/" + filename; //这里就不要用openFileOutput了,那个是往手机内存中写数据的 availableBlocks = stat.getAvailableBlocks(); return availableBlocks * blockSize; } /** * 获取手机内部总的存储空间 totalBlocks = stat.getBlockCount(); return totalBlocks * blockSize; } /** * 获取手机内置存储剩余存储空间 availableBlocks = stat.getAvailableBlocks(); return availableBlocks * blockSize; } /** * 获取手机内置存储总的存储空间
讲字符串转为ASCII码,使用时再转过来 ''' 将手机号存入数据库最节省内存:2个字符即可 1、先将手机号转为字符串进行切割 因为int只能接受百万级数字(即6位数),所以切割时要注意 2、转为int 类型 因为chr()只能接受int类型 将内容转为ASCII码 3、通过ord() 将ASCII码 转为数字类型 ''' 举栗子: # 假手机号,如有雷同,请联系删除 phone = '11100021110
有了文字后,人类有又了记录过往数据的能力。但是,都是靠手工存储。 这些历史,这里不做过多种赘述 造纸与活字印刷术 造纸术与应刷术是中国四大发明之一。 1923年,CTR发明了首款电动打孔机,与手动打孔机相比,速度和精确度有了很大提升。1920年代末,IBM发明了一种80列打孔卡,称得上当时的“高密度存储设备”。“IBM打孔卡”成为业界标准。 显然你可以看出,这张卡片上能存储的数据少的可怜,事实上几乎没有人真的用它来存数据。一般它是用来保存不同计算机的设置参数的。 打孔卡存储原理 有空的地方为1,无孔的地方为零。 与之相关的计算机平平无奇,可是在存储容量方面有着革命性的变化--它可以存储“海量”的数据,“高达”4.4MB(5百万个字符),这些数据保存在50个24英寸的硬磁盘上。 因为人们的生活,信息开始越来越膨胀,使得信息存储犹为重要。致使数据存储得到快速的发展。最后,我们用现在流行的DVD存储与以前的存储产品相比较,就可以直观的看出数据存储的发展。
Android实现手机内存存储功能 效果图 写入数据 读取数据 源码 AddDataTestActivity activity_add_data_test.xml SharedPreferencesUtil Log打印日志类(LogUtil) SharedPreferences.Editor的commit()方法和apply()方法的区别 效果图 点击存入,点击获取 吐司结果 写入数据 读取数据 (SharedPreferences.Editor)commit()和apply()区别: commit和apply虽然都是原子性操作,但是原子的操作不同,commit是原子提交到数据库,从提交数据到存在磁盘中都是同步过程 ; 而apply方法的原子操作是原子提交到内存中,而非数据库,之后再异步提交数据到数据库中。 commit提交是同步过程,效率会比apply异步提交的速度慢,有返回值;apply没有返回值,无法知道存储是否失败。 在不关心提交结果是否成功的情况下,优先考虑apply方法。
Android应用开发SharedPreferences存储数据的使用方法 SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个 key-value(键值对)SharedPreferences常用来存储一些轻量级的数据。 1、使用SharedPreferences保存数据方法如下: //实例化SharedPreferences对象(第一步) SharedPreferences mySharedPreferences SharedPreferences.Editor对象(第二步) SharedPreferences.Editor editor = mySharedPreferences.edit(); //用putString的方法保存数据 , Toast.LENGTH_LONG).show(); 执行以上代码,SharedPreferences将会把这些数据保存在test.xml文件中,可以在File Explorer的data/data
介绍了主流的数据存储方案,包括:内存,文件,数据库和消息队列,以及数据序列化/反序列化的方法。很多时候,工具就在那里,我们只是不知道它们的存在而已。 比如说在client端,有很多 embedded database 可以使用,并不需要局限于 sqlite;而当我们存储数据于缓存服务器中,json 未必是最好的序列化方式,有些场合可以考虑 protobuf 在内存中处理数据时,除了一般程序语言自带的 map / list / set 之外,还有很多性能卓绝的数据结构可以考虑,比如 bloomfilter,各种 tree 等。 对于每一个请求,你都要走一遍可能涉及到读数据库或者读缓存的 blacklist 操作,这样不经济。 变动之后生成一个 bloomfilter,当请求到达的时候,检查请求是否命中这个 bloomfilter,如果没命中,这肯定是一个被允许的请求,直接放过,如果命中了,这有可能是一个要被拒绝的请求,这时候才需要访问数据库
数据存储 Android数据存储的几种形式 Internal Storage Store private data on the device memory. 会在data/data/包名/shared_prefes里面去创建相应的xml文件,根节点是Map,其实内部就是将数据保存到Map集合中, 然后将该集合中的数据写到xml文件中进行保存。 Android平台中嵌入了一个关系型数据库SQLite,和其他数据库不同的是SQLite存储数据时不区分类型,例如一个字段声明为Integer类型, 我们也可以将一个字符串存入, 一个字段声明为布尔型 除非是主键被定义为Integer,这时只能存储64位整数创建数据库的表时可以不指定数据类型,例如: CREATE TABLE person(id INTEGER PRIMARY KEY 我们在更新或安装apk时一般将其放到外部存储设备中来进行安装,但是如果一个手机没有外部存储设备该怎么办呢?总不能就不给更新或者安装了。
,sd卡路径:storage/sdcard * 所有存储设备,都会被划分成若干个区块,每个区块有固定的大小 * 存储设备的总大小 = 区块大小 * 区块数量 一般的术语:手机自带的32G,指的是手机的外部存储空间 还有缓存中一般是存放一些内存中一些直接读取的数据。 手机上有个clear Data:删除的是"该file文件夹"中 clear cache:删除的是cache缓存中的文件。 储存步骤 得到了SharedPreferences对象之后, 就可以开始向SharedPreferences文件中存储数据了,主要可以分为三步实现。 1. 调用 commit()方法将添加的数据提交,从而完成数据存储操作。
Python3中,urllib.request.urlretrieve根据文件的URL下载文件。 程序从http://pythonscraping.com下载logo图片,然后在程序运行的文件夹里保存为logo.jpg文件。
不过传感器数据的类型必须是统一的,而且,这样一来就会在同一个表格里注册大量的数据。这种情况下,有时就得花一段时间才能从表格里检索到我们需要的数据。为了解决这个麻烦,数据库提供了一个叫作索引的机制。 键值存储 键值存储属于 NoSQL 数据库的一种。NoSQL 是一种不使用 SQL数据库的统称。 键值存储,就是把一种叫作“值”( value)的数据值,和能够一对一特定“值”的“键”( key)的集合保存在一起。此外,还有把数据保存在内存里的键值存储,以及把数据保存在硬盘里的键值存储。 有一种叫作 Redis 的键值存储,它具备前后两者的性质,在通常情况下它是把数据存储在内存上的,但在任何时间都能够把数据保存到硬盘。因此,它既能够高速执行存储,也能永久保存数据。 文档型数据库 文档型数据库和键值存储一样,都属于 NoSQL 数据库的一种。文档型数据库能以 XML 和 JSON 这种结构化文档的格式保存数据。
zipmap优化hash 将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新建一个hash对象时开始是用zipmap来存储的。 这个zipmap其实并不是hash table,但是zipmap相比正常的hash实现可以节省不少hash本身需要的一些元数据存储开销。 Dict 来存储(Dict实际是Hash Table的一种实现),list采用ziplist数据结构存储数据,这样做一方面为了节省内存,另一方面这种结构式顺序存储的结构,能够更好利用cpu local set 当set集合中的元素为整数且元素个数小于配置set-max-intset-entries值时,使用intset数据结构存储,否则转化为Dict结构,Dict实际是Hash Table的一种实现, 也有节约内存的方式,当sorted set的元素个数及元素大小小于一定限制时,它是用ziplist来存储。
那么我们怎样将其转化为二进制存储到计算机中,这个过程我们称之为编码。更广义地讲,就是把信息从一种形式转化为另一种形式的过程。 Unicode 就相当于一张表,建立了字符与编号之间的联系,它是一种规定,但是 Unicode 本身只规定了每个字符的数字编号是多少,并没有规定这个编号如何存储。 Little endian 和 Big endian 上一节已经提到,UCS 格式可以存储 Unicode 码(码点不超过0xFFFF)。 以汉字“严”为例,Unicode 码是 4E25,需要用两个字节存储,一个字节是 4E,另一个字节是 25。 总结 搞清楚了 ASCII、Unicode 和 UTF-8 的关系,我们就可以总结一下现在计算机系统通用的字符编码工作方式: 在计算机内存中,统一使用 Unicode 编码,当需要保存到硬盘或者需要传输的时候
一 简单介绍: 我们前面很少将提取的数据或者获取的源码保存下来;其实日常的工作中在解析出数据后接下来就是存储数据。 1). txt文本存储: python txt文件操作中离不开open()函数,它可以创建或者打开指定的文件,并创建一个文件对象 ,基本的语法: open() 函数用于创建或打开指定文件,该函数的语法格式如下 以with as的方式实现数据存储好处:不需要调用close()方法 以上写入还可以使用: file = open("小说.txt","a",encoding="utf-8") file.write JSON文件存储: 先官方话了解一下: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
Week12 2016/12/1上午1-4节 一、复习 二、文件存储 存 1、openFileOutput(Context类的方法)获取输出流FileOutputStream android.xsoftlab.net ) 3、InputStreamReader (Java 2 Platform SE 5.0) 4、BufferedReader (Java 2 Platform SE 5.0) 5、read 三、查看存储数据 左侧选中模拟器,右侧选中File Explorer 3、找到文件:文件位置在data/data/项目所在包/files 4、打开文件,用右上角的pull a file from devcie工具,把文件保存到电脑上 四、SharedPreferences存储 1、getDefaultSharedPreferences PreferenceManager - Android SDK 2、getSharedPreferences , int) 3、找到文件:文件位置在data/data/项目所在包/shared_prefs,是一个xml文档 4、打开文件,用右上角的pull a file from devcie工具,把文件保存到电脑上
腾讯云归档存储(Cloud Archive Storage, CAS)是面向企业和个人开发者提供的低成本、高可靠且易于管理的云端离线存储服务,适用于海量、非结构化数据长时间备份,实现数据的容灾和c。归档存储采用分布式云端存储,您可以通过 RESTful API 对存储的数据进行访问。归档存储易于管理,您无需关心硬件维护及容量扩展;按实际使用量付费,为您节省额外成本。
扫码关注云+社区
领取腾讯云代金券