GVKun编程网logo

初入NoSql网上海淘资料摘要1

20

在本文中,我们将为您详细介绍初入NoSql网上海淘资料摘要1的相关知识,此外,我们还会提供一些关于ActiveMQ相关资料摘录、DB2NoSQLJSON资料索引、Digg与Reddit加入NoSQL阵

在本文中,我们将为您详细介绍初入NoSql网上海淘资料摘要1的相关知识,此外,我们还会提供一些关于ActiveMQ 相关资料摘录、DB2 NoSQL JSON资料索引、Digg与Reddit加入NoSQL阵营、Linux 下 Socket 编程实验资料摘录及手记的有用信息。

本文目录一览:

初入NoSql网上海淘资料摘要1

初入NoSql网上海淘资料摘要1

1、Nosql数据库根据数据的存储模型和特点分类:

类型

部分代表

特点

列存储

Hbase

Cassandra

Hypertable

顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

文档存储

MongoDB

CouchDB

文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。

key-value存储

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

图存储

Neo4J

FlockDB

图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。

对象存储

db4o

Versant

通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

xml数据库

Berkeley DB XML

Ba***

高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。

ActiveMQ 相关资料摘录

ActiveMQ 相关资料摘录

##activemq 集群架构参考

  • Apache ActiveMQ 实战 (1)- 基本安装配置与消息类型
  • Apache ActiveMQ 实战 (2)- 集群
  • 系统间通信(25)——ActiveMQ 集群方案(上)
  • 系统间通信(26)——ActiveMQ 集群方案(下)

##activemq 专栏

  • ActiveMQ 技术详解
  • 系统间通信技术
  • Spring 整合 JMS
  • http://blog.csdn.net/column/details/activemq.html

##activemq 博客

  • 菩提树下的杨过的博客
  • 大步流星的博客
  • QING____的博客
  • 输入链接说明

##activemq 配置

  • ActiveMQ 使用经验
  • ActiveMQ 配置详解
  • ActiveMQ 相关资料整理
  • ActiveMQ 配置详解

##Producer 特点及优化

  • ActiveMQ 中 Producer 特性详解
  • ActiveMQ 生产者流量控制(Producer Flow Control)

##Consumer 特点及优化

  • ActiveMQ 中 Consumer 特性详解与优化

##activemq 其他

  • ActiveMQ : Async error occurred: java.lang.OutO..
  • 调试 activemq 源码
  • Apache ActiveMQ - The Failover Transport Options

##activemq 消费者重发机制

  • activemq 消息重发机制
  • ActiveMQ Redelivery Policy(消息重发策略)
  • Redelivery Policy
  • spring activeMQ 死信队列

DB2 NoSQL JSON资料索引

DB2 NoSQL JSON资料索引

(大致喵了一下,和mongodb基本完全一样)

安装成功后的DB2 10.5 FP1目录下的readme不错!值得一看
C:\IBM\SQLLIB\json\readme.txt


然后是以下四篇文章 

http://www.ibm.com/Search/?q=DB2+NoSQL+JSON&v=17&en=utf&lang=en&cc=us

DB2 JSON capabilities, Part 1: Introduction to DB2 JSON

DB2 JSON capabilities, Part 2: Using the command-line processor

DB2 JSON capabilities, Part 3: Writing applications with the Java API

DB2 JSON capabilities, Part 4: Using the IBM NoSQL Wire Listener ...

Digg与Reddit加入NoSQL阵营

Digg与Reddit加入NoSQL阵营

Digg和Reddit在这个月都宣布了将转向Cassandra ,因为MySQL对他们来说伸缩性不够了。一些人认为MySQL+memcached不再是事实上的伸缩解决方案了。

Digg在去年九月宣布了他们转向 Cassandra的计划,而这一过程在这个月完成了。仔 细比对了其它项目——HBase,Hypertable,Tokyo Cabinet/Tyrant,Voldemort,以及Dynomite——,他们最终选择了Cassandra,出于以下的考虑:

每个系统都有它自己的强项和弱项,但是Cassandra综合了各个方面。它提供了面向列的数据存储,因此这相比纯粹的key/value存储又更 结构化一些。它通过分布式高可用的点对点集群来运作。尽管目前它的核心功能还有一些欠缺,但相较于其它方案而言,它更接近我们想要的。

Digg几乎重建了整个基础设施,跳出了LAMP栈。主要的起因是MySQL,如同任何其它的SQL数据库一样,它是为读取而作的优化,而不能很好 的处理写入:

我们不再使用用MySQL的主要动机,是因为要在一个快速增长看不到头的数据集上,构建一个高性能密集写入的应用越来越困难了。这种增长迫使我们使 用水平和垂直的分区策略,这就消除了关系型数据所带来的大部分价值了,同时仍然会产生各种开销...

随着我们系统的扩张,跨越多个数据中心的冗余,网络性能,以及增加容量和无宕机时间的更换失效节点对我们来说就尤为重要。我们计划继续使用廉价硬 件,并假设失效是平常的。这些都为MySQL增加了难度。

另一个网站,Reddit,曾经出现过memcacheDB相关的问题, 一开始他们通过增加更多的RAM来处理,但他们需要一个长久的解决方案是再明显不过的。他们在十天之内完成了向 Cassandra的转换,在Cassandra开发者和社区的帮助以及EC2在测试和部署Cassandra的实例方面的支持下,只用了一名开 发者就做到了。

因为许多重要的网站,比如Facebook或Twitter,都已经在使用或者计划迁移到Cassandra,一些人声称MySQL+memcached 作为事实的伸缩性解决方案的时代结束了。Todd Hoff并不认为MySQL将会在即将来到的某个时间消失,但它不会再代表首位的解决方案:

从一个小的角度来看,很清楚MySQL+memcached的时代已经过去了。它会坚持一段时间。旧的技术很少完全的消失。一些人仍在骑马。一些人 还在使用CD。而因特网也不会完全取代电视这种古老的电磁广播技术,但大多数将会奔向一个新的时代...

我们很清楚MySQL+memcached背后的许多思想都是说到了点子上的,这些都在新的系统里得到了保留,只是它的实现显得有点笨重。开发者参 与进来,铺平了缺口,磨掉了棱角,创建了一个新的强健的平台,其本身成为了新生态系统和新时代的根基。

对于Hoff所说的"很清楚MySQL+memcached的时代已经过去了",Mark Atwood表示不同的意见,他认为memcached 仍将会长期得到应用:

memcached作为实现伸缩速度的前沿技术这一时代或许"过去"了,但这并不是因为memcached失败,而是因为另外的技术(并不是替代, 而是补充)正在涌现...

但这不会是memcached的终结。可以说,这一高性能的key-value存储仍将是一个有用的构建模块,不管是对于其自身,还是作为其它的技 术组件的子组件。

我肯定memcache将会继续演化。将会有更多的实现,更多的局限将会被移除,将会有更多的管理工具,还有更多的系统加上memcached的网 络协议,而一些ORMs框架在构建时就会假设memcached可用,将会有协议方面的特性以及在共享托管和云环境方面的实现。

Hoff后来在他文章的评论中又说到:"我并不是想说缓存将会消失或者MySQL将会消失。我坚定的相信内存将是新的硬盘这一概念...所过去了的 是MySQL与memcached,相辅相成的,作为开发可伸缩系统的默认平台。"

尽管MySQL与memcache仍将会是伸缩性问题的良好解决方案,但已经有新的non-SQL方案产生了,而它们看起来能为超大规模的系统带来 更好的结果。

查看英文原文:Digg and Reddit Have Joined the NoSQL Camp

Linux 下 Socket 编程实验资料摘录及手记

Linux 下 Socket 编程实验资料摘录及手记

//-- 服务端 --

 

//-- bool create();

int m_sock = -1;

//domain: 说明我们网络程序所在的主机采用的通讯协族 (AF_UNIX AF_INET). AF_UNIX 只能够用于单一的 Unix 系统进程间通信 , AF_INET 是针对 Internet , 因而可以允许在远程主机之间通信

//type: 我们网络程序所采用的通讯协议 (SOCK_STREAM,SOCK_DGRAM) SOCK_STREAM 表明我们用的是 TCP 协议 , 这样会提供按顺序的 , 可靠 , 双向 , 面向连接的比特流. SOCK_DGRAM 表明我们用的是 UDP 协议 , 这样只会提供定长的 , 不可靠 , 无连接的通信.

//protocol: 由于我们指定了 type, 所以这个地方我们一般只要用 0 来代替就可以了

//socket 为网络通讯做基本的准备. 成功时返回文件描述符 , 失败时返回 -1, errno 可知道出错的详细情况

m_sock = socket(AF_INET, SOCK_STREAM, 0);   //!!## 实测 =0x05

DEBUG_LOG("m_sock=%d\n", m_sock);

if (m_sock == -1)

    return -1;

 

int on = 1;

if (::setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, (const char*) &on,

        sizeof(on)) == -1)

    return -2;

DEBUG_LOG("::setsockopt() done.\n");

 

//-- bool bind(const int port);

memset(&m_addr, 0, sizeof(m_addr));

m_addr.sin_family = AF_INET;

m_addr.sin_addr.s_addr = INADDR_ANY;

m_addr.sin_port = htons(port);

//sockfd: 是由 socket 调用返回的文件描述符.

//addrlen: sockaddr 结构的长度.

//my_addr: 是一个指向 sockaddr 的指针.

// 不过由于系统的兼容性 , 我们一般不用这个头文件 , 而使用另外一个结构 (struct sockaddr_in) 来代替

// 成功是返回 0, 失败的情况和 socket 一样 (##Gophern 理解:看 errno 可知道出错的详细情况)

if (::bind(m_sock, (struct sockaddr *) &m_addr, sizeof(m_addr)) != 0)   //== -1)

    return -3

 

//-- bool listen() const;

//listen 函数将 bind 的文件描述符变为监听套接字. 返回的情况和 bind 一样.

//sockfd: bind 后的文件描述符.

//backlog: 设置请求排队的最大长度. 当有多个客户端程序和服务端相连时 , 使用这个表示可以介绍的排队长度. listen 函数将 bind 的文件描述符变为监听套接字. 返回的情况和 bind 一样.

if (::listen(m_sock, MAXCONNECTIONS) != 0)

    return -4;

 

while (true) {

    //-- bool accept(Socket&) const;

    int addr_length = sizeof(m_addr);

    //sockfd: listen 后的文件描述符.

    //addr,addrlen 是用来给客户端的程序填写的 , 服务器端只要传递指针就可以了. bind,listen accept 是服务器端用的函数 ,accept 调用时 , 服务器端的程序会一直阻塞到有一个客户程序发出了连接. accept 成功时返回最后的服务器端的文件描述符 , 这个时候服务器端可以向该描述符写信息了. 失败时返回 -1

    int newSocket = ::accept(m_sock, (sockaddr *) &m_addr, (socklen_t *) &addr_length); //!!## 实测 =0x06

    if (newSocket <= 0) {

        DEBUG_LOG("::accept() failed, newSocket = %d\n", newSocket);

        return -1001;

    }

 

    try {

        while (true) {

            //std::string data;

            //new_sock >> data;

            // 输入 Socket::recv(std::string &s)

            const int MAXRECV = 500;

            char buf[MAXRECV + 1];

            memset(buf, 0, MAXRECV + 1);

            //!!##Gophern: 调用::recv() 时,回阻塞,在 telnet 输入一行敲回车时返回

            //!!## Telnet 输入的内容超过 MAXRECV,则下次(循环到此处时)不会阻塞,而是继续读入剩下的字节。

            int status = ::recv(m_sock, buf, MAXRECV, 0);   //!!## 输入 "123"+ 回车 => bytesNum=5 | "123\\r\\n"

            if (status == -1) {

                std::cout << "status == -1   errno == " << errno

                        << "  in Socket::recv\n";

                return 0;

            } else if (status == 0) {

// 这是 Telnet 客户端 Close Connection 的时候发生的

                return 0;

            } else {

                s = buf;

                return status;

            }

 

 

            //new_sock << data; // 反馈客户端回显

            // 输出 Socket::send(std::string &s)

            int status = ::send(m_sock, s.c_str(), s.size(), MSG_NOSIGNAL);

            if (status == -1)

                return -2001;

 

 

        }

    } catch (SocketException &e) {

        std::cout << "Exception was caught:" << e.description()

                << "\nExiting.\n";

    }

}

 

 

 

 

 

//-- 客户端 --

 

//-- Socket::create()

int m_sock = -1;

m_sock = socket ( AF_INET, SOCK_STREAM, 0 );

Debug.Assert(m_sock != -1);

 

int on = 1;

Debug.Assert( setsockopt ( m_sock, SOL_SOCKET, SO_REUSEADDR, ( const char* ) &on, sizeof ( on ) ) != -1 );

 

 

//-- Socket::connect ( host, port )

memset(&m_addr, 0, sizeof(m_addr));

m_addr.sin_family = AF_INET;

m_addr.sin_port = htons ( port );

 

int status = inet_pton ( AF_INET, host.c_str(), &m_addr.sin_addr );

Debug.Assert( errno != EAFNOSUPPORT );

 

//int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)

//sockfd:socket 返回的文件描述符.

//serv_addr: 储存了服务器端的连接信息. 其中 sin_add 是服务端的地址

//addrlen:serv_addr 的长度

//connect 函数是客户端用来同服务端连接的. 成功时返回 0,sockfd 是同服务端通讯的文件描述符失败时返回 -1

status = ::connect ( m_sock, ( sockaddr * ) &m_addr, sizeof ( m_addr ) );

Debug.Assert(status == 0);


今天的关于初入NoSql网上海淘资料摘要1的分享已经结束,谢谢您的关注,如果想了解更多关于ActiveMQ 相关资料摘录、DB2 NoSQL JSON资料索引、Digg与Reddit加入NoSQL阵营、Linux 下 Socket 编程实验资料摘录及手记的相关知识,请在本站进行查询。

本文标签: