>웹 프론트엔드 >JS 튜토리얼 >저수준 설계: 폴링 시스템 - 엣지 케이스

저수준 설계: 폴링 시스템 - 엣지 케이스

WBOY
WBOY원래의
2024-08-31 14:43:33538검색

Low-Level Design: Polling System - Edge Cases

목차

사례 1 - 업데이트를 위한 버전 관리
사례 2 - PollID가 기본 키가 아닌 UUID임
사례 3 - 비어 있거나 잘못된 옵션
사례 4 - 중복 옵션
사례 5 - 질문 길이 제한
사례 6 - 설문조사 만료

다음 글을 먼저 참고해주세요.

  1. 저수준 디자인: 폴링 시스템: 기본

  2. 하위 수준 설계: 폴링 시스템 - Node.js 및 SQL 사용

엣지 케이스 처리

사례 1

동일한 설문 ID와 관련된 이전 세부정보를 유지하면서 설문조사 질문 및 옵션에 대한 업데이트를 관리하려면 버전 관리 시스템을 구현할 수 있습니다. 이 접근 방식을 사용하면 각 설문 조사의 기록 데이터를 추적할 수 있으므로 업데이트 후에도 이전 세부 정보가 보존됩니다.

1단계: 데이터베이스 스키마 변경

  1. 여론조사표 업데이트

    • 최신 버전의 설문조사를 추적하려면 설문조사 테이블에 current_version_id 열을 추가하세요.
  2. 설문조사 버전 테이블 만들기

    • 이전 버전의 설문조사를 저장할 새 테이블을 만듭니다.

업데이트된 데이터베이스 스키마

으아아아

2단계: API 구현 변경

폴링 컨트롤러 업데이트

새 버전을 만들기 전에 updatePoll 메소드를 수정하여 질문이 변경되었는지 확인하세요.

파일: 컨트롤러/pollController.js
으아아아

3단계: 폴링 경로 업데이트

pollRoutes.js에서 경로가 올바르게 정의되었는지 확인하세요.

파일: 경로/pollRoutes.js
으아아아

변경 사항 요약

  1. 데이터베이스:

    • current_version_id를 포함하도록 설문조사 테이블을 업데이트했습니다.
    • 질문 버전 추적을 위해 poll_versions 테이블을 만들었습니다.
    • 옵션 및 투표 표는 변경되지 않습니다.
  2. API:

    • 설문조사 및 버전을 초기화하는 새로운 createPoll 메소드를 만들었습니다.
    • 새 버전을 만들기 전에 질문 변경 사항을 확인하기 위해 updatePoll 메서드를 업데이트했습니다.
    • 투표 및 설문조사 결과 보기 방법이 추가되었습니다.
  3. 라우팅:

    • 설문 생성, 업데이트, 투표 및 결과를 처리하는 데 필요한 모든 경로가 정의되었는지 확인했습니다.

사례 2

pollId가 UUID(Universally Unique Identifier)여야 하는 시나리오를 처리하려면

다음은 코드를 제공하지 않고 폴링 시스템에서 thepollId에 대한 UUID를 구현하는 단계입니다.

Poll ID용 UUID를 구현하는 단계

  1. ** 데이터베이스 스키마 업데이트:**

    • polls, poll_versions, options, andvotes 테이블을 수정하여 정수 대신 poll_id에 CHAR(36)을 사용하세요.
    • UUID로 연결된 설문 조사 질문 및 옵션의 이전 버전을 저장하기 위해 새 poll_versions 테이블을 만듭니다.
  2. ** UUID 생성:**

    • UUID를 생성하는 방법을 결정합니다. 애플리케이션 환경에서 라이브러리나 내장 함수를 사용하여 UUID를 생성할 수 있습니다.
  3. ** 설문 조사 논리 생성:**

    • 새 설문조사를 생성할 때 UUID를 생성하여 poll_id로 사용하세요.
    • 새 투표 기록을 투표 테이블에 삽입합니다.
    • 초기 질문을 poll_versions 테이블에 삽입하고 생성된 UUID와 연결합니다.
  4. ** 업데이트 폴링 로직:**

    • 설문조사 업데이트 시:
  5. 질문이 바뀌었는지 확인해보세요.

    • 질문이 변경된 경우 poll_versions 테이블에 새 버전 항목을 생성하여 이전 질문과 옵션을 저장하세요.
    • 필요에 따라 새 질문과 옵션으로 투표 테이블을 업데이트합니다.
  6. ** 투표 논리:**

    • UUID를 poll_id로 사용하도록 투표 메커니즘을 업데이트하세요.
  7. 투표 요청에 제공된 UUID가 설문조사 테이블에 있는지 확인하세요.

  8. ** API 업데이트:**

    • poll_id에 대한 UUID를 수락하고 반환하도록 API 엔드포인트를 수정하세요.
    • 모든 API 작업(생성, 업데이트, 삭제, 투표)이 UUID 형식을 일관되게 참조하는지 확인하세요.
  9. ** 테스트:**

    • 모든 시나리오(생성, 업데이트, 투표, 설문 조사 결과 검색)에서 UUID가 올바르게 처리되는지 확인하기 위해 애플리케이션을 철저히 테스트하세요.
  10. ** 문서:**

    • poll_id 形式の変更と、バージョン管理と UUID の使用に関連する新しい動作を反映するために API ドキュメントを更新します。

これらの手順に従うことで、データの整合性と履歴追跡を確保しながら、ポーリング システムに pollId の UUID を正常に実装できます。


ケース3

空または無効なオプション

検証アプローチ:

  • API 入力検証: API エンドポイントにチェックを実装して、リクエスト本文で指定されたオプションが空ではなく、特定の基準を満たしていること (許可されていない場合は特殊文字がないことなど) を検証します。
  • フィードバック メカニズム: オプションが無効または空の場合は、明確なエラー メッセージをユーザーに提供し、入力を修正するようにガイドします。

ケース4

オプションの重複

一意性チェック:

  • 挿入前の検証: 投票にオプションを追加する前に、データベース内の既存のオプションに重複がないか確認してください。これは、ポーリング ID を使用してオプション テーブルをクエリし、新しいオプションと比較することで実行できます。
  • ユーザー フィードバック: 重複したオプションが検出された場合は、意味のあるエラー メッセージを返してユーザーにどのオプションが重複しているかを知らせ、それに応じて入力を変更できるようにします。

事例5

質問の長さ制限

文字制限:

  • API 検証: API 内のアンケートの質問とオプションの最大文字数制限を設定します。これは、作成および更新プロセス中に質問の長さと各オプションを確認することで実行できます。
  • ユーザー インターフェイスのフィードバック: クライアント側の検証を実装して、ユーザーが入力中に文字数制限を超えた場合に即座にフィードバックを提供し、ユーザー エクスペリエンスを向上させます。

ケース6

投票期限

有効期限のメカニズム:

  • タイムスタンプ管理: 各投票がいつ作成されたかを記録するタイムスタンプ フィールドを投票テーブルに追加し、オプションで有効期限の別のフィールドを追加します。
  • スケジュールされたチェック: 期限切れのポーリングを定期的にチェックし、データベース内で非アクティブとしてマークするバックグラウンド ジョブまたは cron タスクを実装します。これには、期限切れの投票への投票を阻止することも含まれる場合があります。
  • ユーザー通知: オプションで、投票の作成者と参加者に有効期限が近づいていることを通知し、投票が非アクティブになる前に投票に参加できるようにします。

まず次の記事を参照してください:

  1. 低レベル設計: ポーリング システム: 基本

  2. 低レベル設計: ポーリング システム - Node.js と SQL の使用

詳細:

システム設計に関連するすべての記事を取得します
タグ: SystemDesignWithZeeshanAli

zeeshanali とのシステムデザイン

Git: https://github.com/ZeeshanAli-0704/SystemDesignWithZeeshanAli

위 내용은 저수준 설계: 폴링 시스템 - 엣지 케이스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.