aws-genai-llm-chatbot

Форк
0
86 строк · 2.5 Кб
1
import * as cdk from "aws-cdk-lib";
2
import * as dynamodb from "aws-cdk-lib/aws-dynamodb";
3
import { Construct } from "constructs";
4

5
export class RagDynamoDBTables extends Construct {
6
  public readonly workspacesTable: dynamodb.Table;
7
  public readonly documentsTable: dynamodb.Table;
8
  public readonly workspacesByObjectTypeIndexName: string =
9
    "by_object_type_idx";
10
  public readonly documentsByCompoundKeyIndexName: string =
11
    "by_compound_key_idx";
12
  public readonly documentsByStatusIndexName: string = "by_status_idx";
13

14
  constructor(scope: Construct, id: string) {
15
    super(scope, id);
16

17
    const workspacesTable = new dynamodb.Table(this, "Workspaces", {
18
      partitionKey: {
19
        name: "workspace_id",
20
        type: dynamodb.AttributeType.STRING,
21
      },
22
      sortKey: {
23
        name: "object_type",
24
        type: dynamodb.AttributeType.STRING,
25
      },
26
      billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
27
      encryption: dynamodb.TableEncryption.AWS_MANAGED,
28
      pointInTimeRecovery: true,
29
      removalPolicy: cdk.RemovalPolicy.DESTROY,
30
    });
31

32
    workspacesTable.addGlobalSecondaryIndex({
33
      indexName: this.workspacesByObjectTypeIndexName,
34
      partitionKey: {
35
        name: "object_type",
36
        type: dynamodb.AttributeType.STRING,
37
      },
38
      sortKey: {
39
        name: "created_at",
40
        type: dynamodb.AttributeType.STRING,
41
      },
42
    });
43

44
    const documentsTable = new dynamodb.Table(this, "Documents", {
45
      partitionKey: {
46
        name: "workspace_id",
47
        type: dynamodb.AttributeType.STRING,
48
      },
49
      sortKey: {
50
        name: "document_id",
51
        type: dynamodb.AttributeType.STRING,
52
      },
53
      billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
54
      encryption: dynamodb.TableEncryption.AWS_MANAGED,
55
      pointInTimeRecovery: true,
56
      removalPolicy: cdk.RemovalPolicy.DESTROY,
57
    });
58

59
    documentsTable.addGlobalSecondaryIndex({
60
      indexName: this.documentsByCompoundKeyIndexName,
61
      partitionKey: {
62
        name: "workspace_id",
63
        type: dynamodb.AttributeType.STRING,
64
      },
65
      sortKey: {
66
        name: "compound_sort_key",
67
        type: dynamodb.AttributeType.STRING,
68
      },
69
    });
70

71
    documentsTable.addGlobalSecondaryIndex({
72
      indexName: this.documentsByStatusIndexName,
73
      partitionKey: {
74
        name: "status",
75
        type: dynamodb.AttributeType.STRING,
76
      },
77
      sortKey: {
78
        name: "document_type",
79
        type: dynamodb.AttributeType.STRING,
80
      },
81
    });
82

83
    this.workspacesTable = workspacesTable;
84
    this.documentsTable = documentsTable;
85
  }
86
}
87

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.