在本文中,我们将为您详细介绍初入NoSql网上海淘资料摘要1的相关知识,此外,我们还会提供一些关于ActiveMQ相关资料摘录、DB2NoSQLJSON资料索引、Digg与Reddit加入NoSQL阵
在本文中,我们将为您详细介绍初入NoSql网上海淘资料摘要1的相关知识,此外,我们还会提供一些关于ActiveMQ 相关资料摘录、DB2 NoSQL JSON资料索引、Digg与Reddit加入NoSQL阵营、Linux 下 Socket 编程实验资料摘录及手记的有用信息。
本文目录一览:初入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 集群架构参考
- 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资料索引
(大致喵了一下,和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在这个月都宣布了将转向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 编程实验资料摘录及手记
//-- 服务端 --
//-- 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 编程实验资料摘录及手记的相关知识,请在本站进行查询。
本文标签: