하나의 데이터베이스가 여러 프론트 엔드 (서버 당 하나의 프론트 엔드)와 간단한 기록을 유지한다고 가정 할 때, 시간을 다루는 일반적인 해결책이 무엇인지 궁금합니다. 여러 대의 서버를 보유하고있는 즉시 전 세계적으로 일관성있는 시계를 사용할 수 없으며 요청간에 일종의 주문을 유지할 수있는 가능한 솔루션에 관심이있었습니다.하나의 데이터베이스, 다중 프론트 엔드, 유지 보수 요청 순서
구체적인 예를 들어, 고객의 기록을 기록하려고합니다. 여기서 기록은 시간 순서가 지정된 레코드 집합으로 정의됩니다. 레코드 테이블은 (customer_id, time, data)처럼 간단 할 수 있으며 history는 customer_id ==가 요청한 모든 행이 될 수 있습니다. 사용자가 보낸 각 요청에는 한 고객에게 보낸 하나의 레코드가 포함됩니다. 이상적으로, 시간은 요청이 고객에 의해 프런트 엔드로 전송 된 "실제"시간을 참조해야합니다 (사용자 POV에서 본 시간 임). 정확히 말하자면 절대 시간이 아니라 각 고객의 레코드 간 순서를 유지하는 데 신경을 쓴다.
벡터 시계 등의 솔루션을 알고 있습니다.하지만 다소 복잡한 것처럼 보입니다.이 문제는 다소 일반적인 문제 일 것으로 예상됩니까? 내 경우에는 허용되지 않습니다
솔루션 : 프런트 엔드에 도달하는 요청을 변경
- : 나는 불행히도로 요청이 전달되는 제약 조건에서 작동해야합니다. 내가 프런트 엔드와 데이터베이스 사이에 필요한 통신 프로토콜을 완벽하게 제어 할 수 있습니다. 그래서 질문이 빨간색 청 같은 비트 사운드있다 :
- 서버 시간 클럭
[EDIT] 같은 프런트 엔드 서버에 의해 처리되는 상호 정렬되는 필요한 모든 요청을 동기화 여기에 대한 나의 근거가 있습니다. 지금 당장이 문제가 아니지만, Google App Engine과 같은 플랫폼에 갈 가능성에 관심이 있습니다. Google App Engine은 서버가 시간 동기화되는 것을 보장하지 않는다고 명시 적으로 말합니다. 요청 순서에 대한 그 문제에 대한 해결책은 분명하지 않습니다.하지만 벡터 시계와 같은 것이 실제로 유일한 "좋은"해결책입니까?
now() 함수를 사용하여 데이터베이스 서버에서 시간을 생성 할 때 발생하는 문제 – Zimbabao
아마 설명이 명확하지 않지만 프런트 엔드에 표시되는 순서를 유지하려고하므로 순서와 다를 수 있습니다. 그들은 데이터베이스에 도착합니다. (h1은 프런트 엔드 1에 도착하고, h2는 프런트 엔드 2에 나중에 도착하지만 프런트 엔드 1은 h1에 대해 수행하기 전에 프런트 엔드 2가 h2에 대한 데이터베이스를 업데이트합니다. –