couchbase_Couchbase:使用Twitter和Java创建大型数据集

couchbase

在播放/演示Couchbase或任何其他NoSQL引擎时,创建大型数据集的一种简单方法是将Twitter feed注入数据库。

对于这个小应用程序,我正在使用:

  • Couchbase Server 2.0服务器
  • Couchbase Java SDK (将由Maven安装)
  • Twitter4J (将由Maven安装)
  • 使用Twitter4J调用Twitter流API

在此示例中,我使用Java将Tweets注入Couchbase,如果需要,显然可以使用其他语言。

我的Github存储库Twitter Injector for Couchbase上提供了该项目的源代码,您也可以在此处下载Binary版本,然后从命令行执行应用程序,请参阅“运行应用程序”段落 。 不要忘记创建您的Twitter oAuth密钥(请参阅下一段)

创建oAuth密钥

能够使用Twitter API的第一件事是创建一组密钥。 如果您想进一步了解所有这些键/令牌,请查看oAuth协议: http ://oauth.net/

1.登录到Twitter开发门户: https : //dev.twitter.com/

2.创建一个新的应用程序

单击“创建应用程序”链接或进入“用户菜单>我的应用程序>创建新应用程序”

3.输入应用程序详细信息

4.单击“创建您的Twitter应用程序”按钮

您的应用程序的OAuth设置现已可用:

5-转到“应用程序设置”页面,然后单击“创建我的访问令牌”按钮

现在,您已拥有创建应用程序所需的所有信息:

  • 消费者密钥
  • 消费者秘密
  • 访问令牌
  • 访问令牌机密

从命令行运行Java应用程序时,这些键将在twitter4j.properties文件中使用。请参阅

创建Java应用程序

以下代码是应用程序的主要代码:

package com.couchbase.demo;import com.couchbase.client.CouchbaseClient;
import org.json.JSONException;
import org.json.JSONObject;
import twitter4j.*;
import twitter4j.json.DataObjectFactory;import java.io.InputStream;
import java.net.URI;import java.util.ArrayList;
import java.util.List;
import java.util.Properties;public class TwitterInjector {public final static String COUCHBASE_URIS = "couchbase.uri.list";public final static String COUCHBASE_BUCKET = "couchbase.bucket";public final static String COUCHBASE_PASSWORD = "couchbase.password";private List<URI> couchbaseServerUris = new ArrayList<URI>();private String couchbaseBucket = "default";private String couchbasePassword = "";public static void main(String[] args) {TwitterInjector twitterInjector = new TwitterInjector();twitterInjector.setUp();twitterInjector.injectTweets();}private void setUp() {try {Properties prop = new Properties();InputStream in = TwitterInjector.class.getClassLoader().getResourceAsStream("twitter4j.properties");if (in == null) {throw new Exception("File twitter4j.properties not found");}prop.load(in);in.close();if (prop.containsKey(COUCHBASE_URIS)) {String[] uriStrings =  prop.getProperty(COUCHBASE_URIS).split(",");for (int i=0; i<uriStrings.length; i++) {couchbaseServerUris.add( new URI( uriStrings[i] ) );}} else {couchbaseServerUris.add( new URI("http://127.0.0.1:8091/pools") );}if (prop.containsKey(COUCHBASE_BUCKET)) {couchbaseBucket = prop.getProperty(COUCHBASE_BUCKET);}if (prop.containsKey(COUCHBASE_PASSWORD)) {couchbasePassword = prop.getProperty(COUCHBASE_PASSWORD);}} catch (Exception e) {System.out.println( e.getMessage() );System.exit(0);}}private void injectTweets() {TwitterStream twitterStream = new TwitterStreamFactory().getInstance();try {final CouchbaseClient cbClient = new CouchbaseClient( couchbaseServerUris , couchbaseBucket , couchbasePassword );System.out.println("Send data to : "+  couchbaseServerUris +"/"+ couchbaseBucket );StatusListener listener = new StatusListener() {@Overridepublic void onStatus(Status status) {String twitterMessage = DataObjectFactory.getRawJSON(status);// extract the id_str from the JSON document// see : https://dev.twitter.com/docs/twitter-ids-json-and-snowflaketry {JSONObject statusAsJson = new JSONObject(twitterMessage);String idStr = statusAsJson.getString("id_str");cbClient.add( idStr ,0, twitterMessage  );System.out.print(".");} catch (JSONException e) {e.printStackTrace(); }}@Overridepublic void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {}@Overridepublic void onTrackLimitationNotice(int numberOfLimitedStatuses) {}@Overridepublic void onScrubGeo(long userId, long upToStatusId) {}@Overridepublic void onException(Exception ex) {ex.printStackTrace();}};twitterStream.addListener(listener);twitterStream.sample();} catch (Exception e) {e.printStackTrace();  }}}

一些基本的解释:

  • setUp()方法仅从类路径中读取twitter4j.properties文件以构建Couchbase连接字符串。
  • injectTweets打开Couchbase连接-第76行,并调用TwitterStream API。
  • 创建一个ListenerListener将从Twitter接收所有onStatus (状态)。 最重要的方法是onStatus(),它接收消息并将其保存到Couchbase中。
  • 一件有趣的事情:由于Couchbase是JSON文档数据库,因此您可以直接获取JSON字符串并直接保存它。
    cbClient.add(idStr,0 ,twitterMessage);


打包

为了能够直接从Jar文件执行应用程序,我正在使用带有以下信息的Assembly插件:
pom.xml:

... 
<archive><manifest><mainclass>com.couchbase.demo.TwitterInjector</mainclass></manifest><manifestentries><class-path>.</class-path></manifestentries>
</archive>
...

一些信息:

  • mainClass条目允许您设置运行java -jar命令时要执行的类。
  • Class-Path项允许您将当前目录设置为类路径的一部分,程序将在其中搜索twitter4j.properties文件。
  • 程序集文件还配置为包括所有依赖项(Twitter4J,Couchbase客户端SDK等)

如果您确实想从源代码构建它,只需运行:

mvn clean package

这将创建以下Jar文件。 /target/CouchbaseTwitterInjector.jar

运行Java应用程序

在运行该应用程序之前,您必须创建一个twitter4j.properties文件,其中包含以下信息:

twitter4j.jsonStoreEnabled=trueoauth.consumerKey=[YOUR CONSUMER KEY]
oauth.consumerSecret=[YOUR CONSUMER SECRET KEY]
oauth.accessToken=[YOUR ACCESS TOKEN]
oauth.accessTokenSecret=[YOUR ACCESS TOKEN SECRET]couchbase.uri.list=http://127.0.0.1:8091/pools
couchbase.bucket=default
couchbase.password=

保存属性文件,然后从同一位置运行:

jar -jar [path-to-jar]/CouchbaseTwitterInjector.jar

这会将推文注入您的Couchbase服务器。 请享用 !

参考: Couchbase:通过Tug博客博客中的JCG合作伙伴 Tugdual Grall 使用Twitter和Java创建大型数据集 。

翻译自: https://www.javacodegeeks.com/2012/11/couchbase-create-a-large-dataset-using-twitter-and-java.html

couchbase

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C编译器、链接器、加载器详解

一、概述 C语言的编译链接过程要把我们编写的一个c程序&#xff08;源代码&#xff09;转换成可以在硬件上运行的程序&#xff08;可执行代码&#xff09;&#xff0c;需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作…

matlab bwdist

bwdist函数用于计算元素之间的距离。 举个例子&#xff1a; 如果a 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 那么&#xff1a; [D,L]bwdist(a); D 1.4142 1.0000 1.0000 1.0000 1.4142 1.0000 0 0 0 1.0000 1.0000 0 0 0 1.0000 1.0000 0 0 0 1.0000 1.4142 1.000…

js函数库-D3

推荐&#xff1a; https://www.cnblogs.com/createGod/p/6884629.html转载于:https://www.cnblogs.com/john-hwd/p/10616166.html

配置Ubuntu Server高速apt-get源

今天刚装上Ubuntu Server 12&#xff0c;默认的apt-get源比较慢。更改一下源地址。 方法&#xff1a; 1、修改源地址&#xff1a; cp /etc/apt/sources.list /etc/apt/sources.list.bak vim /etc/apt/sources.list 加入如下内容&#xff08;中科大的&#xff09;&#xff1a; …

matlab find

find函数用于返回所需要元素的所在位置 (位置的判定&#xff1a;在矩阵中&#xff0c;第一列开始&#xff0c;自上而下&#xff0c;依次为1&#xff0c;2&#xff0c;3...,然后再从第二列&#xff0c;第三列依次往后数)find&#xff08;A&#xff09;返回矩阵A中非零元素所在位…

红黑树操作详解——很形象的过程

红黑树是一种很好的自平衡二叉排序树&#xff0c;在此&#xff0c;给出一个网友给出的红黑树操作详解&#xff1a; https://segmentfault.com/a/1190000012728513 里面给出了红黑树的详细操作&#xff0c;过程很形象&#xff01;&#xff01;&#xff01; 结合可视化数据结构网…

地图事件触发_使用地图触发功能处理相干事件

地图事件触发本文介绍如何通过使用映射触发器来处理一致性事件。 基本上&#xff0c;建议使用Oracle Coherence中的分布式数据管理来研究Oracle Coherence API的基本配置和实现。 映射触发器是Oracle Coherence提供最高度定制的缓存管理系统的最重要功能之一。 MapTrigger表示…

C++ 内存对齐

注&#xff1a;本文代码测试环境为win7 X64 cpu, 编译器为gcc4.7.1 和 vs2010 内存对齐是编译器为了便于CPU快速访问而采用的一项技术 我们先从一个例子开始&#xff0c;对下面的类(或者结构体) class node { char c; int i; short s; }no; sizeof(no)的值是多少呢&#xff0c;…

matlab sub2ind与ind2sub

sub2ind与ind2sub函数 A [1 2 3; 4 5 6;7,8,9]; >> fsub2ind(size(A), 2, 3) f 8 即把矩阵A中第二行第三列的元素的全下标标识&#xff08;2,3&#xff09;转换为对应的单下标标识8&#xff0c;即该元素从第一列顺次数过去是第八号元素。 而ind2sub则用于把矩阵中…

Spring Boot和Angular 2入门食谱

我主要是一名服务开发人员&#xff0c;必须不时创建一些可传递的UI。 我精通基于AngularJS1的基本UI&#xff0c;并且可以使用之前概述的方法来完成工作。 遗憾的是&#xff0c;随着Angular 2的出现&#xff0c;我不得不将以前的方法抛诸脑后&#xff0c;而现在使用Spring Boot…

Robbers' watch CodeForces - 685A (暴力)

大意: 一天n小时, m分钟, 表以7进制显示, 求表显示数字不同的方案数 注意到小时和分钟部分总长不超过7, 可以直接暴力枚举. 关键要特判0, 0的位数要当做1来处理 #include <iostream> #include <algorithm> #include <cstdio> #include <math.h> #inclu…

什么是javax.ws.rs.core.context? [第5部分]

如何使用Context批注 在什么是javax.ws.rs.core.context的第4部分中&#xff1f; 您学习了如何使用Context批注将HttpServletResponse和HttpServletRequest类注入资源方法。 在本文中&#xff0c;您将学习如何使用其余两个仅在servlet容器中可用的类&#xff0c;它们是&#x…

Linux字符界面和图形界面

Ubuntu图形界面和字符界面的切换 Ubuntu和其他的Linux系统一样&#xff0c;有图形界面和字符界面&#xff0c;同时能够设置默认的启动界面。 linux的显示界面分为命令行的字符界面和图形界面&#xff0c;我们可以设置linux的默认启动的显示界面。然后也可以手动的来回的切换。 …

matlab conv2

conv2函数----------------------------------------1、用法 1. Cconv2(A,B,shape); %卷积滤波 A:输入图像&#xff0c;B:卷积核 假设输入图像A大小为ma x na&#xff0c;卷积核B大小为mb x nb&#xff0c;则 当shapefull时&#xff0c;返回全部二维卷积结…

面试趣味题

题目&#xff1a;一元钱可以买到一瓶水,两个空瓶子可以换一瓶水,小明有20元钱,问最多可以喝多少瓶水? 在面试的时候做了一个这种逻辑题。当时只是要求写出最后的结果。没有要求用代码来实现。我下面准备先分析一下&#xff0c;然后再转换成代码去实现。 根据这个示意图可以简单…

mongodb 持久性_多语言持久性:带有MongoDB和Derby的EclipseLink

mongodb 持久性从现在开始&#xff0c;多语种持久性一直是新闻。 从2011年底开始&#xff0c;在著名的Fowler职位的激励下&#xff0c;我看到了更多更好的主意。 最新的一个是公司内部的学生项目&#xff0c;我们在其中使用Scala作为后端数据&#xff0c;将数据持久存储到Mongo…

linux 动态库文件stripped属性理解

在centos 6.2下用file命令查看文件信息的时候&#xff0c;显示如下&#xff1a; libcom_err.so.2: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped libcrypto.so.10: ELF 64-bit LSB shared object, x86-64, version 1 (SYS…

matlab gradient

gradient函数 >> x[6,9,3,4,0;5,4,1,2,5;6,7,7,8,0;7,8,9,10,0]x 6 9 3 4 0 5 4 1 2 5 6 7 7 8 0 7 8 9 10 0 >> [Fx,Fy]gradient(x) Fx 3.0000 -1.5000 -2.5000 -1.5000…

第六章 传输层

思维导图&#xff1a; 一、 概述 与数据链路层关系 提供可靠的、高效的、性价比高的数据传输输出实体 传输层利用网络层的服务&#xff0c;为它的上层应用层提供服务 网络层与传输层不同点&#xff1a; 网络层运行在由承运商操作的路由器上&#xff0c;因此用户无法真正控制到网…

Kanvas:从您的ANTLR语法生成一个简单的IDE

什么是编辑器&#xff1f; 对我来说&#xff0c;编辑器是我工作中使用的主要工具。 作为语言工程师&#xff0c;我创建新的语言&#xff0c;使用现有的语言&#xff0c;并且需要其他工具来使用它们。 我希望能够在一个定制的IDE中将所有这些黑客一起入侵&#xff0c;我可以为我…