Twitter Stream의 축적과 빠른 검색 NoSQL(MongoDB)

Download Report

Transcript Twitter Stream의 축적과 빠른 검색 NoSQL(MongoDB)

오픈소스 NoSQL(MongoDB)을 이용한
Twitter Stream의 저장과 실시간 공간지식 발견
군산대학교 컴퓨터정보공학과
[email protected]
남광우
목차
• 서론
• 관련 연구
• 소셜 미디어 데이터 수집/전처리
• 소셜 미디어 스트리밍 환경에서의 연관 규칙 탐사
• 스팸 필터링
• 추출 지식의 활용
• 시스템 구현
• 결론 및 향후 연구 계획
[첨부]
MongoDB 기반 Twitter Stream 저장과 탐사
2
연구 배경 및 필요성
Twitter 스트림 에서의 공간 정보 추출
- 도메인 온톨로지와 텍스트 정보에 기반한 위치 추정에 집중
- 공간현상의 추출 및 공유 부분은 부족
Twitter 스트림 스트림에서 정보 추출
- 자연어 기반 텍스트 정보 셋에서의 키워드 추출
- 시간의 변화에 따른 이슈 변화 모니터링
- 단일 키워드 기반의 정보 제공, 현상에 대한 경험적 추가 지식 필요
데이터 마이닝 기술의 활용
- 추출된 키워드들 간의 유용한 연관관계를 발견
- 사용자에게 이슈(키워드)에 대한 이해도를 향상시킬 수 있음
SNS에서 데이터 마이닝 기법을 이용 공간상에 논의되는 다양한 이슈들 추출
이를 시맨틱 공간 지식(GeoSemantic Knowledge)으로 가공, 활용 가능
MongoDB 기반 Twitter Stream 저장과 탐사
3
연구 내용
•
Twitter 스트림에서의 시공간 지식 추출 프레임워크 개발
– 스트림 마이닝을 활용한 SNS 데이터 수집 및 이슈 추출
– 대용량 Twitter 스트림의 저장과 분석 프레임워크 개발
•
Twitter Stream의 축적과 빠른 검색
– NoSQL(MongoDB)를 이용한 저장
– 빠르며 반복적인 데이터 접근을 지원하기 위한 데이터 Caching
•
Sliding Window 기반의 Twitter 스트림 분석
–
•
공간 연관 규칙과 Clustering
트위터에서의 공간지식 추출 활용 방안
– 특정 지역에서의 시간에 따른 이슈 변화 모니터링
MongoDB 기반 Twitter Stream 저장과 탐사
4
MongoDB in NoSQLs
- 왜 MongoDB를 선택했는가?
NoSQL
• NoSQL = No SQL? no no............
• NoSQL = Not Only SQL!!!
Relational
Graph
Data
Column
Key-Value
Document
MongoDB 기반 Twitter Stream 저장과 탐사
6
왜 NoSQL 인가?
Relational DBMS
NoSQL
• ACID Transactions
• Massive Data
• 안전성, 완전성 중심
• Complex Data
• 성능과 보호의 절충
Web,
BigData
• Schema Free
• 구현의 복잡성
• One Insert/Many
Read
• Many Insert/Many
Update
• 성능과 안전
• 구현의 단순성
MongoDB 기반 Twitter Stream 저장과 탐사
7
NoSQL for BigData
http://blog.kissmetrics.com/twitter-statistics/?wide=1
MongoDB 기반 Twitter Stream 저장과 탐사
8
NoSQL Stack
Apache Hadoop
Google
Hadoop MapReduce
Distributed
Programming Model
MapReduce
HBase
Distributed
Databases
BigTable
Hadoop Distributed
File System(HDFS)
Distributed
File System
Google File System(GFS)
Cluster
MongoDB 기반 Twitter Stream 저장과 탐사
9
NoSQL의 종류
• Key-value stores
– Amazon’s Dynamo
– Cassandra
– BigTable, BerkeleyDB
• Document Database
–
MongoDB, CouchDB
• Column stores
– Hadoop/HBase, Google BigTable, Cassandra
• Graph databases
– FlockDB, Neo4J
MongoDB 기반 Twitter Stream 저장과 탐사
10
NoSQL : Document Database
•
CouchDB, MongoDB
JSON
Twitter에서 JSON으로
데이터 제공
MongoDB 기반 Twitter Stream 저장과 탐사
11
MongoDB
• Document Oriented Database
– Data is stored in documents, not tables / relations
– JSON -> BSON : BSON is a binary representation of JSON
• MongoDB is Implemented in C++
– best performance
– Platforms 32/64 bit Windows Linux, Mac OS-X, FreeBSD, Solaris
• Language drivers for:
–
–
–
–
–
–
Ruby / Ruby-on-Rails
Java
C#
JavaScript
C / C++
Erlang Python, Perl others.....
MongoDB 기반 Twitter Stream 저장과 탐사
12
MongoDB Data and Queries
•
JSON : Example
location1 = {
name: "10gen HQ”,
address: "17 West 18th Street 8th Floor”,
city: "New York”,
zip: "10011”,
latlong: [40.0,72.0],
tags: [“business”, “cool place”],
tips: [
{user:"nosh", time:6/26/2010, tip:"stop by for office from 4-6pm"},
{.....},
]
}
MongoDB 기반 Twitter Stream 저장과 탐사
13
MongoDB Data and Queries
• Creating your indexes
– db.locations.ensureIndex({tags:1})
– db.locations.ensureIndex({name:1})
– db.locations.ensureIndex({latlong:”2d”})
• Finding places:
– db.locations.find({latlong:{$near:[40,70]}})
• With regular expressions:
– db.locations.find({name: /^typeaheadstring/)
• By tag:
– db.locations.find({tags: “business”})
MongoDB 기반 Twitter Stream 저장과 탐사
14
Twitter 데이터의 수집과 저장
- Streamming API와 MongoDB
Twitter Streamming API
•
Twitter Streamming API
– public streams : follow, track, locations, count, with
– user streams
– site streams
MongoDB 기반 Twitter Stream 저장과 탐사
Twitter4J
16
Twitter Streamming API
https://stream.twitter.com/1.1/statuses/filter.json? locations=-122.75,36.8,-121.75,37.8
{
"text": "Time for the States to fight back !!! Tenth Amendment Movement: Taking On the Feds http://bit.ly/14t1RV #tcot #teaparty”,
"created_at": "Tue Nov 17 21:08:39 +0000 2009",
"geo": -74.5,40.25,
"id": 5806348114,
"in_reply_to_screen_name": null,
"in_reply_to_status_id": null,
"user": {
"screen_name": "TPO_News",
"created_at": "Fri May 15 04:16:38 +0000 2009",
"description": "Child of God - Married - Gun carrying NRA Conservative - Right Winger hard Core Anti Obama (Pro America),
Parrothead - www.ABoldStepBack.com #tcot #nra #iPhone",
"followers_count": 10470,
"friends_count": 11328,
"name": "Tom O'Halloran",
"profile_background_color": "f2f5f5",
"profile_image_url": "http://a3.twimg.com/profile_images/295981637/TPO_Balcony_normal.jpg",
"protected": false,
"statuses_count": 21147,
"location": "Las Vegas, Baby!!",
"time_zone": "Pacific Time (US & Canada)",
"url": "http://www.tpo.net/1dollar",
"utc_offset": -28800,
}
}
MongoDB 기반 Twitter Stream 저장과 탐사
17
Twitter Stream의 수집과 저장
SNS data
collector
Media Stream API
(MediaCollector Account)
Internet
Tweets from following
Insert
Collected
data
JSON
Tweet
collector
Tweet raw
DataBase
(MongoDB)
Abstraction
by Lucene
Tweet Word Vector
Databases(MongoDB
Mentions from anonymous
users(selected based on location)
• Tweet collector:
– Streaming API 기반 트윗 수집, 중복성 검사, 저장
• Abstraction Processing:
– Full Text Tweet을 Lucene 을 이용하여 Word Vector화
MongoDB 기반 Twitter Stream 저장과 탐사
18
Twitter Stream의 수집과 저장
•
TweetStreamCollector
Twitter4J
void start( String dbName )
{
dbManager = new MongoDBManager( dbName );
TwitterStream stream = new TwitterStreamFactory().getInstance();
stream.addListener( this );
FilterQuery query = makeFilter();
stream.filter( query );
ensureIndex();
}
MongoDB 기반 Twitter Stream 저장과 탐사
19
Twitter Stream의 수집과 저장
•
Twitter4J의 Streamming Listener 구현
public void onStatus(Status status)
{
JSONObject mediaData = makeJsonMediaData( status );
dbManager.insertData( MongoDBManager.MEDIADATA_COLLECTION, mediaData.toString() );
String mediaDataId = (String)mediaData.get("MediaDataID");
JSONArray wordArray = (JSONArray)mediaData.get( "TermVector");
JSONObject abstractedData = makeJsonAbstracted( mediaDataId, status, wordArray );
dbManager.insertData( MongoDBManager.ABSRACTED_COLLECTION, abstractedData.toString());
}
MongoDB 기반 Twitter Stream 저장과 탐사
20
Twitter Stream의 수집과 저장
• Syntactic parser: 문장에서 분석을 위한 어휘소 추출
• Stopword filter: 의미 없는 분석 결과 배제를 위한 필터링
by LUCENE
Tweet raw
DataBase
(MongoDB)
Tweet word set
DataBase
(MongoDB)
Text analyzer
Syntactic
parser
Word Dictionary
Stopword
filter
Spam manager
소셜 미디어 스트림에서의 공간 지식 탐색
21
Twitter Stream의 수집과 저장
•
Term Vector의 생성
JSONArray makeJsonTermVector( String text ) throws Exception
{
TagMagnitudeVector tmv = tweetAnalyzer.analyze( text );
JSONObject jsonTag = null;
List<TagMagnitude> tml = tmv.getTagMagnitudes();
//분석 데이터를 담을 JSONArray 생성
JSONArray jsonTermVector = new JSONArray();
for( TagMagnitude tm : tml )
{
//단일 분석 데이터 생성
jsonTag = new JSONObject();
jsonTag.put("DisplayText", tm.getDisplayText());
jsonTag.put("StemmedText", tm.getStemmedText());
jsonTag.put("Magnitude", tm.getMagnitude());
}
}
//분석 데이터 삽입
jsonTermVector.put( jsonTag);
return jsonTermVector;
MongoDB 기반 Twitter Stream 저장과 탐사
22
수집된 데이터
V06
약 3.5일치 분량
16G
V07
약 3일치 분량
14G
약 시간당 15,000개
75,000개 Term
MongoDB 기반 Twitter Stream 저장과 탐사
23
지식탐사와
Sliding Window Caching
Twitter 데이터 스트림에서의 이슈 추출
스트리밍 데이터 처리 : Sliding Window
•
시간의 흐름에 따라 분석 대상 단어들의 모집단
이 변하기 때문에 이를 다시 계산해야 하는 문제
점을 슬라이딩 윈도우를 도입하여 보완
[Celi2011, Lee2011a, Math2010, Sank2009]
MongoDB 기반 Twitter Stream 저장과 탐사
25
공간지식 : 연관규칙 & co-location
Answers:
and
Spatial Databases : A Tour
MongoDB 기반 Twitter Stream 저장과 탐사
26
공간지식 : 연관규칙 & co-location
Spatial Databases : A Tour
MongoDB 기반 Twitter Stream 저장과 탐사
27
공간지식 : Spatial Clustering/Flock
Density-based Clustering
For Real-time Stream Data
MongoDB 기반 Twitter Stream 저장과 탐사
28
공간지식 : Outlier Detection
•
Traffic Outlier Detection
MongoDB 기반 Twitter Stream 저장과 탐사
29
공간지식 : Outlier Detection
MongoDB 기반 Twitter Stream 저장과 탐사
30
Twitter Mining
•
Keywords Trends
소셜 네트워크 환경에서 데이터 마이닝을 이
용한 공간 지식 탐색 방법
31
Twitter Mining
MongoDB 기반 Twitter Stream 저장과 탐사
32
Twitter Mining
MongoDB 기반 Twitter Stream 저장과 탐사
33
Twitter Mining
MongoDB 기반 Twitter Stream 저장과 탐사
34
Problems
•
Massive Data
– Storage
– Caching
•
Knowledge
– Association Rule
– Clustering
MongoDB 기반 Twitter Stream 저장과 탐사
35
Caching for Twitter Streams
•
Stream Caching and Analysis
Twitter Stream
Sliding Window
Caching
Twitter
Twitter
Collector
MongoDB
Twitter RawData
Stream
Analysis
MongoDB
Twitter
Abstracted Data
MongoDB 기반 Twitter Stream 저장과 탐사
36
Caching for Twitter Streams
•
StreamStorage
– Twitter Stream Sliding Window Caching
New Arrival
Tweet Streams
sliding
window query
MongoDB 기반 Twitter Stream 저장과 탐사
37
연관규칙 탐사 알고리즘: FP-stream
• FP-Growth를 데이터 스트림에 활용할 수 있도록 변형
– 빈번하게 발생하는 패턴과 트리 구조가 시간의 변화에 따라 민감하게 변화하
지 않을 것이라는 가정에 근거
– Pattern tree에 빈발항목을 저장하고 tiled-time windows에 현 시점까지의
빈발항목을 축적하여 최근 빈발한 항목에 대한 변화를 용이하게 파악
[Gian2003]
MongoDB 기반 Twitter Stream 저장과 탐사
38
연관규칙 탐사 알고리즘
• 소셜 미디어 스트림에서의 fp-tree 알고리즘 적용 제약 사항
– FP-stream:
• 고정된 크기의 시간을 사용하기 때문에 유동적인 빈발항목을 탐색하기 어려움
• 시간의 누적에 따른 트리 복잡도 및 메모리 사용량 증가
– FUFP-tree:
• Minimum count 값 이상의 빈발 규칙이 새롭게 발생할 경우, 해당 규칙의 유효성
을 검사하기 위하여 이전에 발생한 transaction들을 모두 검색해야 함
• 시간의 누적(트랜잭션의 누적)에 따른 신규 규칙 추출 확률 감소
• FP-tree 알고리즘 적용을 위한 요구사항
– 변화하는 시간에 따라 추출되는 이슈의 변화를 관측 할 수 있어야 함
– FP-tree 구현을 위해 운용 가능한 메인 메모리 규모를 유지해야 함
MongoDB 기반 Twitter Stream 저장과 탐사
39
메모리 관리 방안
•
패턴 노드 테이블
–
–
–
Pattern node ID(nid)를 메모리에 저장
SCi : Bi에서 발생한 규칙에 대한 support count
Hash를 통해 FP-tree의 패턴 노드 테이블(memory or disk)에 접근
Hash table for
Pattern-node
Time-sensitive Sliding-window
B1
B2
B3
B…
SCi
B1
10
B2
15
B5
20
Bi-2
Bi-1
Bi
transaction
Pattern-node table
nid : 0010
Bi
Bi-3
Root
b
a
b
nid 0010
d
c
c
d
nid : 0010
c
MongoDB 기반 Twitter Stream 저장과 탐사
d
f
40
메모리 관리 방안
•
LRU 구조 이용
–
–
–
메모리와 Disk의 Hybrid 저장 구조 지원
pattern tree를 구성하는 항목들에 대한 time window 메타정보를 관리
특정 시간(threshold value) 이상 접근되지 않을 경우 Disk로 저장 or 삭제
t(Bi)
t(Bi+1)
New
New rules
LRU Structure
nid 0010
threshold value
nid : 0010
Bi
SCi
B1
10
B2
15
B5
20
nid 0010
Past
MongoDB 기반 Twitter Stream 저장과 탐사
41
구현
<연관성 분석 기능의 분석 옵션 설정>
<데이터 수집기>
<분석 데이터 결과 매쉬업>
<데이터 분석기>
소셜 미디어 스트림에서의 공간 지식 탐색
42
구현
// long timeUnit, long slideTime, long windowTime, long stopTime, minSupport, number of rules
exp1.expDSTree(10*MINUTE, 20*MINUTE, 2*HOUR, startTime, stopTime, 100, 1000);
[Total Nodes :115196:Created:18379:Deleted:17555 : x 0
[FrequencyList Size : 42923 attrNodeList Size : 42923: Slided Out Items : 5008
streamLineSize :
[0:2078][1:1994][2:2064][3:2110][4:2133][5:2160][6:2131][7:2173][8:2129][9:2211][10:2
186][11:2133][12:2205]
stream Transaction Sum: 27707
stream Items Total Sum: 158901
[Total Nodes :116292:Created:18799:Deleted:17703 : x 0
[FrequencyList Size : 43653 attrNodeList Size : 43653: Slided Out Items : 4971
streamLineSize :
[0:2064][1:2110][2:2133][3:2160][4:2131][5:2173][6:2129][7:2211][8:2186][9:2133][10:2
205][11:2144][12:2277]
stream Transaction Sum: 28056
stream Items Total Sum: 160736
MongoDB 기반 Twitter Stream 저장과 탐사
43
구현
트위터 검색 연동
구글 검색 연동
MongoDB 기반 Twitter Stream 저장과 탐사
44