摘要: Bigtable:一个分布式的结构化数据存储系统译者:alex摘要Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据。Google的很多项目使用Bigtable存储数据,包括Web索引、Google Earth、Google Finance。这些应用对Bigtable提出的要求差异非常大,无论是在数据量上(从URL到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对Google的这些产品,Bigtable还是成功的提供了一个灵活的、高性能的解决方案。本论文描述了Bigtabl 阅读全文
posted @ 2012-03-05 16:40 vivianC 阅读(615) 评论(0) 推荐(0) 编辑
摘要: Google MapReduce中文版译者: alex摘要MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现。用户首先创建一个Map函数处理一个基于key/value pair的数据集合,输出中间的基于key/value pair的数据集合;然后再创建一个Reduce函数用来合并所有的具有相同中间key值的中间value值。现实世界中有很多满足上述处理模型的例子,本论文将详细描述这个模型。MapReduce架构的程序能够在大量的普通配置的计算机上实现并行化处理。这个系统在运行时只关心:如何分割输入数据,在大量计算机组成的集群上的调度,集群中计算机的错误处理,管理 阅读全文
posted @ 2012-03-05 16:37 vivianC 阅读(450) 评论(0) 推荐(0) 编辑
摘要: The Google File System中文版译者:alex摘要我们设计并实现了Google GFS文件系统,一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务。虽然GFS的设计目标与许多传统的分布式文件系统有很多相同之处,但是,我们的设计还是以我们对自己的应用的负载情况和技术环境的分析为基础 的,不管现在还是将来,GFS和早期的分布式文件系统的设想都有明显的不同。所以我们重新审视了传统文件系统在设计上的折衷选择,衍生出了完全不同的设计 思路。GFS完全满足了我们对存储的需求。GFS作 阅读全文
posted @ 2012-03-05 16:32 vivianC 阅读(602) 评论(0) 推荐(0) 编辑
摘要: 写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧./******************************分割线如果体系结构是不对齐的,A中的成员将会一个挨一个存储,从而sizeof(a)为11。显然对齐更浪费了空间。那么为什么要使用对齐呢?体系结构的对齐和不对齐,是在时间和空间上的一个权衡。对齐节省了时间。假设一个体系结构的字长为w,那么它同时就假设了在这种体系结构上对宽度为w的数据的处理最频繁也是最重要的。它的设计也是从优先提高对w位数据操作的效率来考虑的。比如说读写时........ 阅读全文
posted @ 2012-02-08 16:23 vivianC 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 索引可以是“稠密的”,即数据文件中每个记录在索引文件中都设有一个索引项;索引也可以是“稀疏的”,即数据文件中只有一些记录在索引文件中表示出来,通常为每个数据块在索引文件中设一个索引项。索引还可以是“主索引”或者“辅助索引”。主索引能确定记录在数据文件中的位置,而辅助索引不能。比如说,通常我们会在关系的主键上建立主索引,而在其他的属性上建立辅助索引。3.1.1 顺序文件是对关系中的元组按主键进行排序而生成的文件。关系中的元组按照这个次序分布在多个数据块中。3.1.2 稠密索引如果记录是排好序的,我们就可以在记录上建立稠密索引,它是这样一系列存储块:块中只存放记录的键以及指向记录本身的指针,... 阅读全文
posted @ 2012-02-08 15:21 vivianC 阅读(464) 评论(0) 推荐(0) 编辑
摘要: 首先要明确的一个简单的原则:软件的功能一定要建立在硬件支持的基础之上。可以说,软件实现的功能,是由硬件逻辑堆积封装而来的。那么,一个操作系统,我们知道,它具有很多内核的代码、数据结构。控制着整个计算机系统的运转,例如I/O输出、内存访问等等。现在的多进程操作系统,提供给了用户自己编程的功能,也就是让用户自己编程,自己创建进程。那么,一个问题就来了,一个进程假如需要系统的功能调用怎么办?假如让进程来自己控制那些设备的驱动,那么,难免会有恶意的用户进程来破坏;或者说低水平的程序员控制错误。那么,这部分功能就交给操作系统来进行维护。也就是说,在一个用户进程的运行过程中,它一直是处于用户态的。当需要系 阅读全文
posted @ 2012-02-08 15:13 vivianC 阅读(854) 评论(0) 推荐(0) 编辑
摘要: /** 使用信号实现父子进程之间的同步** TELL_WAIT(): set things up for TELL_xxx & WAIT_xxx* TELL_PARENT(): tell parent we are done* WAIT_PARENT(): wait for parent* TELL_CHILD(): tell child we are done* WAIT_CHILD(): wait for child** SIGUSR1: the signal parent sends to child* SIGUSR2: the signal child sends to par 阅读全文
posted @ 2012-01-10 18:41 vivianC 阅读(1283) 评论(0) 推荐(0) 编辑
摘要: 线程的创建int pthread_create(pthread_t *tid, const pthread_attr_t *attr,void *(*start_rtn)(void), void *arg);pthread_create创建成功时返回0,tid存放创建线程的id,第二个参数为创建线程的属性,第三个为线程的执行路径,第四个参数为传给创建线程的参数线程的退出线程可以选择三种方式退出,在不终止整个进程的情况下停止它的执行流。1.线程从启动例程中返回,返回值是线程的退出码。2.线程被同一进程中的其它线程取消。3.线程调用pthread_exit();4.主进程结束,该进程中的所有线程也 阅读全文
posted @ 2012-01-10 18:39 vivianC 阅读(1180) 评论(0) 推荐(0) 编辑
摘要: 在C中,并没有字符串这个数据类型,而是使用字符数组来保存字符串。C字符串实际上就是一个以null('\0')字符结尾的字符数组,null字符表示字符串的结束。需要注意的是:只有以null字符结尾的字符数组才是C字符串,否则只是一般的C字符数组。 C字符串定义时可以利用"="号进行初始化,但是以后不能利用"="对C字符串进行赋值。对C字符串的操作需要通过"string"文件中定义的字符串处理函数。例如://字符串的初始化char a[11] = "huanying";//字符串的赋值strcpy(a, 阅读全文
posted @ 2011-09-05 17:55 vivianC 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。 printf 和sprintf 都使用格式化字符串来指定串的... 阅读全文
posted @ 2011-09-05 11:38 vivianC 阅读(596) 评论(0) 推荐(0) 编辑