2011-03-02 2 views
1

에서 백엔드을 잠금 S,이 장소 소요 앱. 이 예제에서는 b/c 문제가 없으며 로컬 저장소 솔루션을 사용하고 있습니다.여러 (파괴)가 backbone.js에 대한 <a href="http://documentcloud.github.com/backbone/examples/todos/index.html" rel="nofollow">example Todos app</a>에서 backbone.js

그러나 백엔드 (sqlite/datamapper/sinatra)에서 데이터베이스와 유사한 프로세스를 시도하면 여러 개의 HTTP 요청을 동시에 삭제함으로써 db가 잠기고 오류가 다시 발생합니다.

혹시이 문제가 발생 했습니까? DELETE와 전화로 아이디의 배열을 보내는)

  1. 의 (a destroyBatch 있고,시나가 여러 ID를 빼낼 모두에서 삭제 처리 : 나는 주위에 두 가지 방법의

    을 생각할 수 한 번 서버 측.

  2. 비동기 연쇄 반응에서 모델을 하나씩 큐에 넣고 destroy()를 호출하면 클라이언트 측에서 destroyAsync()가 모두 사라질 때까지 destroyAsync()를 호출합니다 그것들은 각각 하나씩 화면에서 일시적으로 삭제됨).

이러한 솔루션 중 어느 쪽이 합리적인 것처럼 보이나요? 아니면 가벼운 거위가 격렬하게 퍼덕 거릴까요?

-j

+0

+1 질문과 이미지 모두 :-) –

+0

감사합니다. Sean! 이제 내가 누군가 내 질문에 대답 할 수 있다면 나는 행복한 야영자가 될 것입니다. – James

답변

1

옵션 2는 실행 가능한 것이 아닙니다. 사용자가 창을 다시 클릭하거나 창을 닫을 수 있으며 삭제가 완전히 완료되지 않습니다. 그러니 이걸로.

이 우리를 잎 : 한 번에 삭제할 모든 ID를 보내기 D

  • :

    • 가 DB에 잠금 장치의 초기 문제를 해결합니다.

    먼저 초기 문제를 해결하려고합니다. 무엇이 그들을 잠그고있는 원인입니까? 나는 꽤 개발 모드 sinatra 한 번에 하나의 요청을 처리하므로 삭제 잔뜩 실제로 백엔드 처리 직렬화됩니다 확신합니다 ... 그건 sqlite 오류가 반환 된 링크가 될 또 다른 질문입니다.

    삭제를 일괄 전송하는 방법입니다. 그것은 좋은 생각이지만 표준 RESTful 컨트롤러에서 벗어난 것이다. 따라서 백본이이를 수행 할 방법을 제공하지 않으므로 스스로 처리해야합니다. 컬렉션에 deleteAll 메소드를 추가하고 거기에서 동기화를 처리 할 수 ​​있습니다 (의존하는 경우 이벤트를 보내는 것을 잊지 마십시오).

  • +0

    옙. 옵션 2는 여러 가지 이유로 좋지 않습니다. 냄새 나는. 동의했다. – James

    +1

    옵션 1 : 여러 리소스에 영향을 미치는 것은 REST의 철학에 위배됩니까? 한 번에 1000 개의 항목을 삭제하려면 1000 개의 전화를 걸고 싶습니다. 그게 다 끝난거야? 귀하의 제안에 따라 내 초기 prob, db 잠금 및 흥미로운 무언가를 고정으로 보았다.나는 개발에서 sqlite를 사용하여 db lockup을 얻습니다. 그러나 heroku에 배포 할 때 postgres db는 여러 개의 삭제에 전혀 문제가 없습니다. 이것은 분명히 순수한 db 문제이므로 사냥을 갈 것입니다. 올바른 방향으로 나를 밀어 주셔서 감사합니다. – James