2011-09-19 4 views
4

사용자가 최대 약 20kb의 텍스트를 입력 할 수있는 contenteditable div가 있습니다. 그들이 입력하는 동안 나는 mysql 테이블에 div를 자동 저장하여 나중에 전화, 태블릿 등에서 해당 텍스트를 검색 할 수있게하고 싶습니다. 지금까지 전체 텍스트 블록을 가져 와서 20 초마다 자동으로 저장했습니다. 그 텍스트를 보유하고있는 내 테이블의 행에 대한 업데이트.mysql에 약 20kb의 텍스트를 효율적으로 다시 저장

나는이 방법이 실제로 비효율적이며 사용자 기반이 커지면 작동하지 않는다는 것을 알고 있습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 예를 들어 원본 텍스트와 변경된 텍스트를 비교하여 저장하면됩니다. node.js를 사용 하시겠습니까? 아이디어가 있다면 알려주세요. 감사.

답변

1

모든 텍스트가 20kb가되는 것은 아니므로 직접적인 문제가 아니어도됩니다. 자동 저장 빈도를 줄이거 나 세션에 자동 저장하거나 데이터베이스에 쓸 빈도를 줄일 수 있습니다.

저장된 버전 (세션에서도 유지할 수 있음)과 입력 된 버전 간의 차이점을 계산할 수 있습니다. 장점은 데이터베이스를 너무 자주 사용할 필요가 없지만 처리가 어려워 져서 웹 서버의로드가 증가한다는 것입니다.

메모리 테이블 (MySQL에서 스토리지 유형을 선택할 수 있음)에 자동 저장을 선택하고 정기적 인 간격으로 물리적 테이블을 대량으로 업데이트하는 별도의 프로세스/cron 작업을 작성할 수 있습니다.

+0

메모리 테이블의 세션 텍스트를 저장하고 실제 테이블의 행을 업데이트하는 것의 차이점은 무엇입니까? 세션 메모리 테이블이 적은 리소스를 사용합니까 아니면 주 테이블의 트래픽을 완화시키는 수정 프로그램일까요? – Lukasz

+0

반드시 세션 테이블 일 필요는 없지만 다른 메모리 테이블도 사용할 수 있습니다. 메모리에 쓰기가 훨씬 빠릅니다. 게다가 세션에서 텍스트를 편집하는 경우 매번 실제 테이블을 읽을 필요가 없습니다. 해당 테이블에 많은 쓰기가 있으면 MySQL 읽기가 너무 느려지므로이를 피하십시오. 귀하의 사이트가 정말로 커지면 MYSQL이 충분하지 않다는 것을 알게 될 것입니다.하지만 그때까지는 약간의 일들을 할 수 있습니다. ;) – GolezTrol

0

이것은 Google 워드 프로세서를 생각 나게합니다. 데이터베이스에 큰 텍스트를 자동 저장하는 멋진 시스템이 있습니다. 이제는 Google 워드 프로세서의 내부 구성 요소에 대해 알지 못합니다.하지만 그 부분을 살펴보아야 할 수도 있습니다.

google은 훨씬 더 많은 대역폭을 제공하므로 데이터가 서버에 지속적으로 저장되는 것처럼 보이지만 방법이 제대로 작동하지 않을 수 있습니다.

사용자가 할 수있는 일은 자바 스크립트를 사용하여 사용자 측에서 데이터를 저장하고 사용자가 "저장"을 떠날 때 또는 클릭 할 때만 데이터를 데이터베이스에로드하는 것입니다. 이렇게하면 페이지로 돌아올 때 savefile이 있으면 파일로 되돌아 갈 수 있습니다.

0

한 가지 방법 :

  1. 사용 아약스는 모든 x 초 또는 X 문자의 배수 (등등 예컨대 매 10, 20, 30 개 문자 등)에 의해 서버에 다시 텍스트를 보낼 수 있습니다.

  2. 세션에서 텍스트를 저장할 수있는 곳에서 서버 측 코드 (예 : PHP)를 사용하여이 요청에서 대부분의 작업을 (빠르고 효율적으로) 수행하십시오. 서버 측 코드는 마지막 요청에서 세션 텍스트와 비교할 수 다음 당신에게 다음 중 하나를 수행 할 수있는 가능성을 줄 것이다 각 요청에

  3. :

    가) 새로운 텍스트의 시작이 같은 경우 이전의 세션 텍스트는 다음과 같이 서로 다른 것으로 데이터베이스의 필드를 업데이트합니다. concat :

    update table 
    set field=concat(field,'extra data...') 
    where id='xx' 
    

    그런 다음 세션 텍스트를 새 텍스트로 설정하십시오.

    b) 시작 텍스트가 다른 경우 필드 값을 새 텍스트로 변경하려면 곧은 업데이트 문을 수행해야한다는 것을 알고 있습니다.

또 다른 방법 :

  1. 당신은 단지 전체 업데이트 필요 다만 CONCAT을한다.
  2. 업데이트를 수행하기 전에 세션에서 특정 양의 요청을 "보유"할 수 있습니다. 예를 들어 매 5 초나 chars마다 ajax를 실행하지만 서버 측 스크립트는 5 번째 호출마다 또는 20 개의 문자 또는 추가시마다 update 문만 실행합니다 첫 번째 부분은 변경되지 않으면 20 개의 문자가 사용됩니다.
관련 문제