450 likes | 943 Views
오픈소스 NoSQL ( MongoDB ) 을 이용한 Twitter Stream 의 저장과 실시간 공간지식 발견. 군산대학교 컴퓨터정보공학과 kwnam@kunsan.ac.kr 남 광 우. 목차. 서론 관련 연구 소셜 미디어 데이터 수집 / 전처리 소셜 미디어 스트리밍 환경에서의 연관 규칙 탐사 스팸 필터링 추출 지식의 활용 시스템 구현 결론 및 향후 연구 계획 [ 첨부 ]. 연구 배경 및 필요성. Twitter 스트림 에서의 공간 정보 추출
E N D
오픈소스NoSQL(MongoDB)을 이용한 Twitter Stream의 저장과 실시간 공간지식 발견 군산대학교 컴퓨터정보공학과 kwnam@kunsan.ac.kr 남 광 우
목차 • 서론 • 관련 연구 • 소셜 미디어 데이터 수집/전처리 • 소셜 미디어 스트리밍 환경에서의 연관 규칙 탐사 • 스팸필터링 • 추출 지식의 활용 • 시스템 구현 • 결론 및 향후 연구 계획 [첨부] MongoDB 기반 Twitter Stream 저장과 탐사
연구 배경 및 필요성 • Twitter 스트림에서의 공간 정보 추출 • - 도메인 온톨로지와 텍스트 정보에 기반한 위치 추정에 집중 • - 공간현상의 추출 및 공유 부분은 부족 • Twitter 스트림스트림에서 정보 추출 • - 자연어 기반 텍스트 정보 셋에서의 키워드 추출 • - 시간의 변화에 따른 이슈 변화 모니터링 • - 단일 키워드 기반의 정보 제공, 현상에 대한 경험적 추가 지식 필요 • 데이터 마이닝 기술의 활용 • - 추출된 키워드들 간의 유용한 연관관계를 발견 • - 사용자에게 이슈(키워드)에 대한 이해도를 향상시킬 수 있음 SNS에서 데이터 마이닝 기법을 이용 공간상에 논의되는 다양한 이슈들 추출 이를 시맨틱 공간 지식(GeoSemantic Knowledge)으로 가공, 활용 가능 MongoDB기반 Twitter Stream 저장과 탐사 3
연구 내용 • Twitter 스트림에서의 시공간 지식 추출 프레임워크 개발 • 스트림 마이닝을 활용한 SNS 데이터 수집 및 이슈 추출 • 대용량 Twitter 스트림의 저장과 분석 프레임워크 개발 • Twitter Stream의 축적과 빠른 검색 • NoSQL(MongoDB)를 이용한 저장 • 빠르며 반복적인 데이터 접근을 지원하기 위한 데이터 Caching • Sliding Window 기반의 Twitter 스트림 분석 • 공간 연관 규칙과 Clustering • 트위터에서의 공간지식 추출 활용 방안 • 특정 지역에서의 시간에 따른 이슈 변화 모니터링 MongoDB기반 Twitter Stream 저장과 탐사
MongoDB in NoSQLs - 왜 MongoDB를 선택했는가?
NoSQL • NoSQL = No SQL? no no............ • NoSQL = Not Only SQL!!! MongoDB 기반 Twitter Stream 저장과 탐사
왜 NoSQL 인가? Relational DBMS NoSQL • ACID Transactions • 안전성, 완전성 중심 • 성능과 보호의 절충 • 구현의 복잡성 • Many Insert/Many Update • Massive Data • Complex Data • Schema Free • One Insert/Many Read • 성능과 안전 • 구현의 단순성 Web, BigData MongoDB 기반 Twitter Stream 저장과 탐사
NoSQL for BigData http://blog.kissmetrics.com/twitter-statistics/?wide=1 MongoDB기반 Twitter Stream 저장과 탐사
NoSQL Stack Apache Hadoop Google MapReduce Distributed Programming Model Hadoop MapReduce Distributed Databases BigTable HBase Google File System(GFS) Hadoop Distributed File System(HDFS) Distributed File System Cluster MongoDB 기반 Twitter Stream 저장과 탐사
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 저장과 탐사
NoSQL : Document Database • CouchDB, MongoDB JSON Twitter에서 JSON으로 데이터 제공 MongoDB 기반 Twitter Stream 저장과 탐사
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 저장과 탐사
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 저장과 탐사
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 저장과 탐사
Twitter 데이터의 수집과 저장 - Streamming API와 MongoDB
Twitter Streamming API • Twitter Streamming API • public streams : follow, track, locations, count, with • user streams • site streams Twitter4J MongoDB 기반 Twitter Stream 저장과 탐사
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 저장과 탐사
Twitter Stream의 수집과 저장 Tweets from following Insert Collected data SNS data collector JSON Tweet raw DataBase (MongoDB) Tweet collector Media Stream API (MediaCollector Account) Internet Abstraction by Lucene • Tweet collector: • Streaming API 기반 트윗 수집, 중복성 검사, 저장 • Abstraction Processing: • Full Text Tweet을 Lucene 을 이용하여 Word Vector화 Tweet Word Vector Databases(MongoDB Mentions from anonymous users(selected based on location) MongoDB기반 Twitter Stream 저장과 탐사
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 저장과 탐사
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 저장과 탐사
Twitter Stream의 수집과 저장 • Syntactic parser: 문장에서 분석을 위한 어휘소 추출 • Stopword filter: 의미 없는 분석 결과 배제를 위한 필터링 by LUCENE Tweet raw DataBase (MongoDB) Tweet word set DataBase (MongoDB) Word Dictionary Text analyzer Syntactic parser Stopword filter Spam manager 소셜 미디어 스트림에서의 공간 지식 탐색
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 저장과 탐사
수집된 데이터 V06 약 3.5일치 분량 16G V07 약 3일치 분량 14G 약 시간당 15,000개 75,000개 Term MongoDB 기반 Twitter Stream 저장과 탐사
지식탐사와 Sliding Window Caching
Twitter 데이터 스트림에서의 이슈 추출 • 스트리밍 데이터 처리 : Sliding Window • 시간의 흐름에 따라 분석 대상 단어들의 모집단이 변하기 때문에 이를 다시 계산해야 하는 문제점을 슬라이딩 윈도우를 도입하여 보완 [Celi2011, Lee2011a, Math2010, Sank2009] MongoDB기반 Twitter Stream 저장과 탐사
공간지식 : 연관규칙& co-location Answers: and Spatial Databases : A Tour MongoDB 기반 Twitter Stream 저장과 탐사
공간지식 : 연관규칙 & co-location Spatial Databases : A Tour MongoDB 기반 Twitter Stream 저장과 탐사
공간지식 : Spatial Clustering/Flock Density-based Clustering For Real-time Stream Data MongoDB 기반 Twitter Stream 저장과 탐사
공간지식 : Outlier Detection • Traffic Outlier Detection MongoDB 기반 Twitter Stream 저장과 탐사
공간지식 : Outlier Detection MongoDB 기반 Twitter Stream 저장과 탐사
Twitter Mining • Keywords Trends 소셜 네트워크 환경에서 데이터 마이닝을 이용한 공간 지식 탐색 방법
Twitter Mining MongoDB 기반 Twitter Stream 저장과 탐사
Twitter Mining MongoDB 기반 Twitter Stream 저장과 탐사
Twitter Mining MongoDB 기반 Twitter Stream 저장과 탐사
Problems • Massive Data • Storage • Caching • Knowledge • Association Rule • Clustering MongoDB 기반 Twitter Stream 저장과 탐사
Caching for Twitter Streams • Stream Caching and Analysis Twitter Stream Sliding Window Caching Stream Analysis Twitter Twitter Collector MongoDB Twitter RawData MongoDB Twitter Abstracted Data MongoDB 기반 Twitter Stream 저장과 탐사
Caching for Twitter Streams • StreamStorage • Twitter Stream Sliding Window Caching New Arrival Tweet Streams sliding window query MongoDB 기반 Twitter Stream 저장과 탐사
연관규칙 탐사 알고리즘: 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)에 접근 B1 B2 B3 B… Bi-3 Bi-2 Bi-1 Bi transaction Root Hash table for Pattern-node Time-sensitive Sliding-window b a c Pattern-node table nid : 0010 d c d b d nid: 0010 f c nid0010 MongoDB기반 Twitter Stream 저장과 탐사
메모리 관리 방안 • LRU 구조 이용 • 메모리와 Disk의 Hybrid 저장 구조 지원 • pattern tree를 구성하는 항목들에 대한 time window 메타정보를 관리 • 특정 시간(threshold value) 이상 접근되지 않을 경우 Disk로 저장 or 삭제 t(Bi) t(Bi+1) New New rules nid : 0010 LRU Structure nid0010 threshold value nid0010 Past MongoDB기반 Twitter Stream 저장과 탐사
구현 <데이터 수집기> <연관성 분석 기능의 분석 옵션 설정> <데이터 분석기> <분석 데이터 결과 매쉬업> 소셜 미디어 스트림에서의 공간 지식 탐색
구현 // 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:2186][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:2205][11:2144][12:2277] stream Transaction Sum: 28056 stream Items Total Sum: 160736 MongoDB 기반 Twitter Stream 저장과 탐사
구현 트위터 검색 연동 구글 검색 연동 MongoDB기반 Twitter Stream 저장과 탐사