2013-07-10 4 views
2

마이크로 블로그 웹 앱에 "해시 태그 지원"을 추가하고 있습니다. 트위터, 구글 +, 페이 스북 및 공동처럼. 내 앱 사용자는 자신의 메시지에 해시 태그를 추가 할 수 있습니다. 해시 태그는 모든 관련 메시지를 나열하는 검색 페이지를 가리키는 html 앵커로 변환됩니다. Now "Trending Hashtags"도 표시하고 싶습니다..트렌드 해시 태그 추적하기

메시지는 user_id 및 일부 meta_data와 함께 MySQL 테이블 (InnoDB)에 저장됩니다.

나는 추세 HT의 처리하기 위해 다음과 같은 방법에 대해 생각했다

:

  1. 메시지에서 해시 태그를 추출;

    <?php 
    preg_match_all('/(#\w[\w\d]+)/', $message, $ht_matches); 
    $hashtags  = array_unique($ht_matches[1]); 
    $hashtags_str = implode(' ', $hashtags); 
    
    DB를 레코드 (공간 분리 문자열)에 별도의 행에 그들을 저장
  2. ;

    e.g. #SanFrancisco #Boeing777 #AirplaneAccident 
    
    --- 
    --- Table 'messages' 
    --- 
    +----+------------+--------------------------------------------+-----+ 
    | id | message | hashtag         | ... | 
    +----+------------+--------------------------------------------+-----+ 
    | 1 | ...  | #SanFrancisco #Boeing777 #AirplaneAccident | ... | 
    +----+------------+--------------------------------------------+-----+ 
    
  3. 저장소 별도 테이블의 각 해시 그렇지 않으면 메타 데이터와 함께 존재한다;

    --- 
    --- Table 'message_hashtags' 
    --- 
    +----+---------------------+------------+---------------------+---------------------+ 
    | id | hashtag    | messages | created_at   | updated_at   | 
    +----+---------------------+------------+---------------------+---------------------+ 
    | 1 | #SanFrancisco  |  1465 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | 
    +----+---------------------+------------+---------------------+---------------------+ 
    | 2 | #Boeing777   |  294 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | 
    +----+---------------------+------------+---------------------+---------------------+ 
    | 3 | #AirplaneAccident |  1721 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | 
    +----+---------------------+------------+---------------------+---------------------+ 
    
    id   int   not null autoincrement 
    hashtag  char(20) not null 
    messages  int   not null default 0 
    created_at timestamp not null 
    updated_at timestamp not null default '0000-00-00 00:00:00' 
    
  4. 쿼리 추세 해시 태그를 가져올 수있는 DB, 예컨대 :이 모든 이론적

    SELECT id FROM message_hashtags WHERE messages > 1 ORDER_BY messages LIMIT 10 
    


. 이 설정은 장기간에 잘 수행됩니까? 나쁜 성능과 어색함을 유발할 수있는 병목 현상과 스토리지 문제가 우려됩니다. 나는 이것을 조숙 한 최적화라고 생각하지 않는다. 왜냐하면 만약 내가 지금 올바른 방법으로 그렇게하지 않는다면, 가능하다면 나중에 많이 바꿀 필요가 있기 때문이다.

해시 태그가 많이 사용되는 주제이기 때문에 일부 사용자는 HT 및 관련 검색을 처리 한 경험이 있다고 가정합니다.

해시 태그를 사용하여 작업하는 다른 방향을 제시하는 제안과 정보에 대해 열려 있습니다.

+0

위대한 질문에 대해 축하 드리고 싶습니다. – Sikian

답변

3

해시 태그와 메시지 사이에 다 대다 관계를 설정하는 것이 좋습니다. 기존의 모든 해시 태그에 대한 정의됩니다 (때 새로운 라이브 업데이트됩니다 필드 idhashtag (그리고 아마도 다른 메타 데이터)와 함께 -

  • 해시 태그이 2 개 이상의 테이블을 추가 포함 사용자가 만들었습니다.
  • - 사용자가 해시 태그가있는 게시물을 만들 때 업데이트되는 post_idhashtag_id 필드가 있습니다. 이 테이블의 모든 항목은 게시물에서 발견 된 단일 해시 태그입니다.그래서 예를 들면

는 :

hashtags 
-------- 
id | hashtag 
---+-------- 
1 | php 
2 | madara 
3 | awesome 

hashtags-messages 
----------------- 
post_id | hashtag_id 
-----------+----------- 
1   | 2 
1   | 3 
2   | 1 
2   | 3 

이 후 2 #php#awesome있는 동안 포스트 (1)의 해시 태그 #madara#awesome을 가지고 있음을 의미한다.

가장 많이 사용되는 해시 태그를 쿼리하는 것은 hashtag_id로 그룹화하는 동안 개수를 쿼리하는 것처럼 쉽습니다. JOIN을 사용하면 해시 태그 자체에 대한 모든 정보를 얻을 수 있습니다.

+0

답변 해 주셔서 감사합니다. BTW : 예제 해시 태그 "php", "madara"및 "awesome"... 그 의도는 독자가 당신이 PHP에서 멋지다고 생각하게합니까? : P –

+0

@MarkusHofmann : 아니, 그것은 내가 멋지다는 것을 그들에게 알려주고, 또한 PHP는 굉장합니다. 이 두 가지는 상호 배타적이지 않습니다. –