2012-02-08 2 views
1

내 응용 프로그램에서 일부 텍스트의 형식으로 markdown을 선택했습니다. 분명히 텍스트를 파싱하는 데 약간의 시간이 걸립니다.파싱 된 텍스트를 저장해야합니까? 그렇다면 어디에서?

질문은 캐싱 할 가치가 있습니까? 그리고 그렇다면 어디에서? 텍스트 파일 또는 데이터베이스?

  • 캐시하지 마십시오 : 제가보기에는

    , 나는 세 가지 옵션이 있습니다. 텍스트가 데이터베이스에서 추출되어 표시 될 때마다 구문 분석을 실행하십시오.
    (Symfony2/나뭇 가지에서, 난 그냥 {{ text|markdown }}을 할 것)

  • 은 데이터베이스에 두 개의 필드, content_sourcecontent_parsed 되세요. 텍스트를 편집 할 때마다 구문 분석 된 코드를 저장하고 요청시 캐시 된 코드 만 표시하면됩니다.

  • 파싱 된 코드를 파일로 캐시하십시오. 요청할 때 파일이 존재하는지 (존재하지 않는지, 파싱하고 캐시하는지) 확인하고 표시하십시오.

생각들?

+0

개인적으로, 나는 두 번째 옵션을 좋아합니다. 방아쇠를 사용하십시오. – Randy

+0

캐시 .......... – dynamic

+2

memcached는 어떻게됩니까? 그것은 파싱 된 코드를 캐싱하는 것이지만 파일은 캐싱하지 않습니다. 그것은 파일보다 빠른 방법으로 검색 할 것이고, 코드하는 방법에 따라, 요청 된 처음 구문 분석하고 캐시에 저장할 수 있습니다. 동일한 데이터를 데이터베이스에 두 번 저장하는 것보다 낫습니다. – Matthew

답변

3

개인적으로 콘텐츠가 커지지 않는 한 개인적으로 원본 및 구문 분석 된 콘텐츠를 모두 데이터베이스에 저장합니다. 매번 구문 분석은 큰 확장 성 문제가 될 것입니다.

그리고 원본 콘텐츠에 액세스해야하는지 여부에 따라 다릅니다. 비슷한 상황에 있었을 때, 우리는 그러한 내용을 분석하는 방법을 변경할 수 있었고 이전 내용을 모두 다시 구문 분석해야하므로 원래 내용을 유지하는 것이 매우 편리합니다.

+0

나도이 방법이 최고라고 생각하지만 크기에 달려있다. 적은 양의 데이터가있는 작은 데이터에서 옵션 # 1을 사용하고 큰 데이터 (기사 등) # 2를 사용할 것입니다. – Czechnology

2

옵션 2 : 각 "페이지"를 반복하여 MarkDown 텍스트를 구문 분석하고 완전히 구문 분석 된 표로 다시 저장하십시오. IIRC는 잘 최적화 된 db와 함께, db는 fs 열기/쓰기보다 빠릅니다.

야간에 db를 반복하거나 낮은로드가 필요할 때마다 cron 태스크를 사용할 수 있습니다.

+0

소스를 덮어 쓰는 것을 의미합니까? – Czechnology

+0

아니요, 위에서 설명한 mike p와 같습니다. 테이블에 두 열을 모두 저장하는 데 사용됩니다. – gorelative

+0

내 답변이 귀하의 질문에 답변을하면 확인 된 답변을 얻는 것이 좋습니다. – gorelative

관련 문제