---
title: เวิลด์ เดต้า สตอเรจ
slug: world-sdk-guide-th/Az2Rspgq7Yi_HkGKypISd
docTags: 
createdAt: 2024-09-02T08:34:13.134Z
---

DataStorage ของ ZEPETO เป็นฐานข้อมูลระยะไกลที่เก็บและจัดการข้อมูลการเล่นเกมของผู้ใช้ตามแต่ละโลก

เหมาะสำหรับการเก็บข้อมูลการเล่นเกมของผู้ใช้ที่ต้องการการบำรุงรักษาหรือการอัปเดตในหลายเซสชันการเล่น เนื่องจากจะถูกเก็บและจัดการโดย UserID

จัดการข้อมูลการเล่นของผู้ใช้ของคุณโดยใช้ [API](https://developer.zepeto.me/docs/multiplay-server/interfaces/ZEPETO_Multiplay_DataStorage.DataStorage/) ที่มีอยู่ในเซิร์ฟเวอร์ ZEPETO Multiplay

คุณสามารถดูและแก้ไขข้อมูลการเล่นเฉพาะของผู้ใช้ที่เก็บไว้ใน Data Storage จากเมนูการจัดการข้อมูลโลกใน ZEPETO Studio

:::hint{type="info"}
**📘&#x20;**&#xE01;รุณาอ้างอิงจากคู่มือต่อไปนี้ \[[การจัดการข้อมูลโลก](docId\:JS9PTvnW815Ys8-TLSsBe)]
:::



## API การจัดเก็บข้อมูล

:::hint{type="info"}
**📘&#x20;**&#xE42;ปรดดูเอกสาร API ต่อไปนี้.[ZEPETO.Multiplay.DataStorage API](https://developer.zepeto.me/docs/multiplay-server/interfaces/ZEPETO_Multiplay_DataStorage.DataStorage)
:::

:::hint{type="danger"}
- กรุณากรอกโค้ดเซิร์ฟเวอร์ index.ts Sandbox.
- ในเซิร์ฟเวอร์ท้องถิ่นในสภาพแวดล้อม Unity Editor ข้อมูลจะไม่ถูกเก็บรักษาเมื่อเซิร์ฟเวอร์ถูกปิดและเปิดใหม่อีกครั้ง.
- หลังจากการปรับใช้โลก ข้อมูลจะถูกเก็บใน ZEPETO DB และดูแลรักษา.
- ข้อมูลจะไม่ถูกบันทึกหากไม่เป็นไปตามกฎด้านล่างนี้:
  - ไม่มีค่าที่ให้ไว้
  - มีการป้อนค่าที่ไม่สามารถเก็บได้
- ข้อจำกัดในการจัดเก็บข้อมูล
  - ข้อจำกัดความยาวของคีย์: 50 ตัวอักษร
    - อนุญาตให้ใช้เฉพาะตัวอักษร ตัวเลข และขีดล่าง (\_) ในคีย์
  - จำนวนคีย์สูงสุด: 1000 ต่อ User ID
  - ขนาดข้อมูลค่าที่สูงสุด: 500,000 ตัวอักษร
    - โปรดทราบว่าข้อมูลค่าจะถูกจัดเก็บพร้อมกับตัวระบุภายในเมื่อจัดเก็บบนเซิร์ฟเวอร์จริง ใช้ด้วยความระมัดระวัง.
:::



## อ่าน / เขียน / ลบข้อมูลสำหรับคีย์เดียว

คุณสามารถอ่าน เขียน และลบข้อมูลสำหรับคีย์เดียวใน DataStorage ของผู้เล่นท้องถิ่นโดยใช้ [`DataStorage.get`](https://developer.zepeto.me/docs/multiplay-server/interfaces/ZEPETO_Multiplay_DataStorage.DataStorage/#get), [`DataStorage.set`](https://developer.zepeto.me/docs/multiplay-server/interfaces/ZEPETO_Multiplay_DataStorage.DataStorage/#set) และ [`DataStorage.remove`](https://developer.zepeto.me/docs/multiplay-server/interfaces/ZEPETO_Multiplay_DataStorage.DataStorage/#remove).

```typescript
import { DataStorage } from 'ZEPETO.Multiplay.DataStorage';

export default class extends Sandbox {

    //...

    async onJoin(client: SandboxPlayer) {
        // โหลด DataStorage ของผู้เล่นท้องถิ่น
        const playerStorage: DataStorage = client.loadDataStorage();

        // รับค่าที่เกี่ยวข้องกับคีย์ 'level' 
	      let playerLevel = await playerStorage.get("level") as number;
        if (playerLevel == null) {
            playerLevel += 1; 
        }

        // เก็บค่าที่เพิ่มขึ้น
        await playerStorage.set("level", playerLevel);

        // ลบข้อมูล
        await playerStorage.remove("level");
    }
}
```



## อ่าน / เขียนข้อมูลสำหรับหลายคีย์

คุณสามารถอ่าน เขียน และลบข้อมูลสำหรับหลายคีย์ในพื้นที่จัดเก็บข้อมูลของผู้เล่นท้องถิ่นโดยใช้ [`DataStorage.mget`](https://developer.zepeto.me/docs/multiplay-server/interfaces/ZEPETO_Multiplay_DataStorage.DataStorage/#mget) และ [`DataStorage.mset`](https://developer.zepeto.me/docs/multiplay-server/interfaces/ZEPETO_Multiplay_DataStorage.DataStorage/#mset).

```typescript
import { DataStorage } from 'ZEPETO.Multiplay.DataStorage';

export default class extends Sandbox {

    //...

    async onJoin(client: SandboxPlayer) {
        const storage = client.loadDataStorage();
        // mset (multi key-value) store
        const success = await storage.mset<number>([
            { key: 'key1', value: 1 },
            { key: 'key2', value: 2 }
        ]);
        // หากสำเร็จ
        if (success) {
            // รับค่าของ key1 และ key2 พร้อมกัน
            const keys = ['key1', 'key2'];
            const keyValeus = await storage.mget(keys);
            keys.forEach(key => {
                const value = keyValeus[key];
                console.log(value);
            });
        }
    }
}
```



## การจัดการข้อผิดพลาด

คุณสามารถดำเนินการจัดการที่เหมาะสมสำหรับข้อยกเว้นที่เกิดขึ้นเมื่อเรียกใช้ API DataStorage โดยอ้างอิงถึงประเภทข้อผิดพลาดที่กำหนดใน [`DataStorageError`](https://developer.zepeto.me/docs/multiplay-server/enums/ZEPETO_Multiplay_DataStorage.DataStorageError).

```typescript
import { DataStorage } from 'ZEPETO.Multiplay.DataStorage';

export default class extends Sandbox {

    //...

    async onJoin(client: SandboxPlayer) {
        // โหลดข้อมูลการจัดเก็บของผู้เล่นท้องถิ่น
        const playerStorage: DataStorage = client.loadDataStorage();

        try {
            let playerLevel = await playerStorage.get("level") as number;
        } catch (error) {
            let systemError = (error as SystemError);

            if (systemError.code === DataStorageError.Unknown || systemError.code === DataStorageError.NetworkError) {
                // ข้อผิดพลาดของระบบหรือข้อผิดพลาดเครือข่าย
                console.log(systemError.message);

            } else if (systemError.code === DataStorageError.KeyConstraintViolated) {
                // ข้อผิดพลาดการละเมิดข้อจำกัดของคีย์
                console.log(systemError.message);
                
            } else if (systemError.code === DataStorageError.ValueConstraintViolated) {
                // ข้อผิดพลาดการละเมิดข้อจำกัดของค่า
                console.log(systemError.message);
            }
        }
    }
}
```



## เข้าถึงการจัดเก็บข้อมูลโดยรหัสผู้ใช้

ยังสามารถเข้าถึงการจัดเก็บข้อมูลของผู้ใช้เฉพาะโดยใช้ UserID ผ่าน [`DataStorage.loadDataStorage`](https://developer.zepeto.me/docs/multiplay-server/namespaces/ZEPETO_Multiplay_DataStorage?_highlight=loaddatastorage#loaddatastorage), แทนที่จะเป็นการจัดเก็บข้อมูลของผู้เล่นในท้องถิ่น.

```typescript
    const userStorage: DataStorage = await loadDataStorage(userId);
```



:::hint{type="success"}
**👍 เคล็ดลับ**

- หากคุณต้องการจัดเก็บข้อมูลระหว่างโลกที่แตกต่างกัน ให้ดำเนินการโดยใช้ [httpService](docId\:NmRZAdw5MxpoEjyG6QZhn)&#x20;
:::

