Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

আপনার ডাটাবেস গঠন

তুমি শুরু করার আগে

আগে আপনি ব্যবহার করতে পারেন রিয়েলটাইম ডাটাবেস , আপনি প্রয়োজন:

  • আপনার ইউনিটি প্রকল্প নিবন্ধন করুন এবং ফায়ারবেস ব্যবহার করার জন্য এটি কনফিগার করুন।

    • যদি আপনার ইউনিটি প্রজেক্ট ইতিমধ্যেই ফায়ারবেস ব্যবহার করে, তাহলে এটি ইতিমধ্যে ফায়ারবেসের জন্য নিবন্ধিত এবং কনফিগার করা আছে।

    • আপনি যদি একটি ঐক্য প্রকল্প আছে না থাকে, তাহলে আপনি একটি বিনামূল্যে ডাউনলোড করতে পারেন নমুনা অ্যাপ্লিকেশন

  • যোগ Firebase ইউনিটি SDK এর (বিশেষত FirebaseDatabase.unitypackage ) আপনার ইউনিটি প্রকল্পে।

মনে রাখবেন যে আপনার ইউনিটি প্রকল্পে Firebase যোগ উভয় কর্ম জড়িত Firebase কনসোল এবং আপনার খোলা ইউনিটি প্রকল্পে (উদাহরণস্বরূপ, আপনি Firebase কনফিগ ফাইল কনসোল থেকে ডাউনলোড করুন, তারপর তাদেরকে আপনার ইউনিটি প্রকল্পের সরাতে)।

স্ট্রাকচারিং ডেটা

এই গাইডটি আপনার ফায়ারবেস রিয়েলটাইম ডেটাবেসে JSON ডেটা গঠনের জন্য ডেটা আর্কিটেকচার এবং সেরা অনুশীলনের কিছু মূল ধারণাগুলি অন্তর্ভুক্ত করে।

সঠিকভাবে কাঠামোগত ডাটাবেস তৈরির জন্য বেশ কিছুটা পূর্ব চিন্তা প্রয়োজন। সর্বাধিক গুরুত্বপূর্ণ, সেই প্রক্রিয়াটিকে যতটা সম্ভব সহজ করার জন্য আপনার ডেটা কীভাবে সংরক্ষণ করা হবে এবং পরে পুনরুদ্ধার করা হবে তার পরিকল্পনা করতে হবে।

কিভাবে ডেটা গঠন করা হয়: এটি একটি JSON গাছ

সমস্ত ফায়ারবেস রিয়েলটাইম ডেটাবেস ডেটা JSON অবজেক্ট হিসাবে সংরক্ষণ করা হয়। আপনি ডাটাবেসকে ক্লাউড-হোস্টেড JSON ট্রি হিসাবে ভাবতে পারেন। একটি এসকিউএল ডাটাবেসের বিপরীতে, কোন টেবিল বা রেকর্ড নেই। যখন আপনি JSON ট্রি তে ডেটা যোগ করেন, তখন এটি একটি বিদ্যমান কী সহ বিদ্যমান JSON কাঠামোর নোড হয়ে যায়। আপনি যেমন ব্যবহারকারীর ID- র বা শব্দার্থিক নাম, আপনার নিজের কী প্রদান করতে পারেন বা তারা ব্যবহার আপনার জন্য প্রদান করা যেতে পারে Push() পদ্ধতি।

আপনি আপনার নিজের কী তৈরি, তাহলে তারা হতে হবে UTF-8 এনকোড, 768 বাইট সর্বাধিক হতে পারে, এবং থাকতে পারে না . , $ , # , [ , ] , / অথবা হওয়া ASCII নিয়ন্ত্রণ অক্ষর 0-31 বা 127. আপনি নিজেদের মান হওয়া ASCII নিয়ন্ত্রণ অক্ষর ব্যবহার করতে পারবেন না, হয়।

উদাহরণস্বরূপ, একটি চ্যাট অ্যাপ্লিকেশন বিবেচনা করুন যা ব্যবহারকারীদের একটি প্রাথমিক প্রোফাইল এবং যোগাযোগের তালিকা সংরক্ষণ করতে দেয়। সাধারণত ব্যবহারকারী প্রোফাইল, একটি পাথ এ অবস্থিত যেমন /users/$uid । ব্যবহারকারী alovelace একটি ডাটাবেস এন্ট্রি যে ভালো কিছু দেখায় থাকতে পারে:

{
  "users": {
    "alovelace": {
      "name": "Ada Lovelace",
      "contacts": { "ghopper": true },
    },
    "ghopper": { ... },
    "eclarke": { ... }
  }
}

যদিও ডাটাবেস একটি JSON ট্রি ব্যবহার করে, ডাটাবেসে সংরক্ষিত ডেটা নির্দিষ্ট দেশীয় প্রকার হিসাবে উপস্থাপন করা যেতে পারে যা উপলব্ধ JSON প্রকারের সাথে মিল রেখে আপনাকে আরও রক্ষণাবেক্ষণযোগ্য কোড লিখতে সাহায্য করে।

ডেটা কাঠামোর জন্য সর্বোত্তম অনুশীলন

নেস্টিং ডেটা এড়িয়ে চলুন

যেহেতু ফায়ারবেস রিয়েলটাইম ডাটাবেস 32 স্তর গভীর পর্যন্ত নেস্টিং ডেটা অনুমোদন করে, আপনি হয়তো ভাবতে প্রলুব্ধ হতে পারেন যে এটি ডিফল্ট কাঠামো হওয়া উচিত। যাইহোক, যখন আপনি আপনার ডাটাবেসের একটি অবস্থানে ডেটা আনেন, আপনি তার সমস্ত চাইল্ড নোডগুলিও পুনরুদ্ধার করেন। উপরন্তু, যখন আপনি কাউকে আপনার ডাটাবেসের নোডে পড়ার বা লেখার অ্যাক্সেস প্রদান করেন, তখন আপনি সেই নোডের অধীনে সমস্ত ডেটা অ্যাক্সেস করার অনুমতি দেন। অতএব, অনুশীলনে, আপনার ডেটা কাঠামো যতটা সম্ভব সমতল রাখা ভাল।

কেন নেস্টেড ডেটা খারাপ তার একটি উদাহরণের জন্য, নিম্নলিখিত গুণ-নেস্টেড কাঠামোটি বিবেচনা করুন:

{
  // This is a poorly nested data architecture, because iterating the children
  // of the "chats" node to get a list of conversation titles requires
  // potentially downloading hundreds of megabytes of messages
  "chats": {
    "one": {
      "title": "Historical Tech Pioneers",
      "messages": {
        "m1": { "sender": "ghopper", "message": "Relay malfunction found. Cause: moth." },
        "m2": { ... },
        // a very long list of messages
      }
    },
    "two": { ... }
  }
}

এই নেস্টেড ডিজাইনের সাথে, ডেটার মাধ্যমে পুনরাবৃত্তি সমস্যাযুক্ত হয়ে ওঠে। উদাহরণস্বরূপ, চ্যাট কথোপকথন শিরোনাম তালিকা সমগ্র প্রয়োজন chats সকল সদস্যদের এবং বার্তা ক্লায়েন্ট ডাউনলোড করা সহ গাছ।

ডাটা স্ট্রাকচার সমতল করা

যদি ডেটা পরিবর্তে পৃথক পাথে বিভক্ত হয়, যাকে ডেনারমালাইজেশনও বলা হয়, এটি প্রয়োজনীয়ভাবে পৃথক কলগুলিতে দক্ষতার সাথে ডাউনলোড করা যেতে পারে। এই চ্যাপ্টা কাঠামোটি বিবেচনা করুন:

{
  // Chats contains only meta info about each conversation
  // stored under the chats's unique ID
  "chats": {
    "one": {
      "title": "Historical Tech Pioneers",
      "lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
      "timestamp": 1459361875666
    },
    "two": { ... },
    "three": { ... }
  },

  // Conversation members are easily accessible
  // and stored by chat conversation ID
  "members": {
    // we'll talk about indices like this below
    "one": {
      "ghopper": true,
      "alovelace": true,
      "eclarke": true
    },
    "two": { ... },
    "three": { ... }
  },

  // Messages are separate from data we may want to iterate quickly
  // but still easily paginated and queried, and organized by chat
  // conversation ID
  "messages": {
    "one": {
      "m1": {
        "name": "eclarke",
        "message": "The relay seems to be malfunctioning.",
        "timestamp": 1459361875337
      },
      "m2": { ... },
      "m3": { ... }
    },
    "two": { ... },
    "three": { ... }
  }
}

কক্ষের তালিকার মাধ্যমে কথোপকথনে মাত্র কয়েক বাইট ডাউনলোড করে, UI- এ তালিকা বা প্রদর্শনের জন্য দ্রুত মেটাডেটা আনা সম্ভব। বার্তাগুলি আলাদাভাবে আনা এবং প্রদর্শিত হওয়ার সাথে সাথে প্রদর্শিত হতে পারে, যাতে UI প্রতিক্রিয়াশীল এবং দ্রুত থাকতে পারে।

স্কেল করে এমন ডেটা তৈরি করুন

অ্যাপ তৈরির সময়, তালিকার একটি উপসেট ডাউনলোড করা প্রায়শই ভাল। এটি বিশেষত সাধারণ যদি তালিকায় হাজার হাজার রেকর্ড থাকে। যখন এই সম্পর্ক স্থির এবং একমুখী হয়, আপনি কেবল পিতামাতার অধীনে শিশু বস্তুগুলি বাসা বাঁধতে পারেন।

কখনও কখনও, এই সম্পর্ক আরও গতিশীল, অথবা এই ডেটাকে অস্বাভাবিক করার প্রয়োজন হতে পারে। অনেক সময় হিসাবে আপনি আলোচনা, তথ্য একটি উপসেট পুনরুদ্ধার করতে একটি ক্যোয়ারী ব্যবহার করে ডেটার denormalize করতে ডেটা পুনরুদ্ধার

কিন্তু এমনকি এটি অপর্যাপ্ত হতে পারে। উদাহরণস্বরূপ, ব্যবহারকারী এবং গোষ্ঠীর মধ্যে দ্বিমুখী সম্পর্ক বিবেচনা করুন। ব্যবহারকারীরা একটি গোষ্ঠীর অন্তর্ভুক্ত হতে পারে এবং গোষ্ঠীগুলি ব্যবহারকারীদের একটি তালিকা নিয়ে গঠিত। যখন কোন ব্যবহারকারী কোন গোষ্ঠীর অন্তর্ভুক্ত তা সিদ্ধান্ত নেওয়ার সময় আসে, তখন বিষয়গুলি জটিল হয়ে যায়।

যা প্রয়োজন তা হল একটি ব্যবহারকারী গোষ্ঠীর তালিকাভুক্ত করার একটি মার্জিত উপায় এবং সেই গোষ্ঠীর জন্য শুধুমাত্র ডেটা আনা। দলের একটি সূচক এখানে একটি মহান চুক্তি সাহায্য করতে পারেন:

// An index to track Ada's memberships
{
  "users": {
    "alovelace": {
      "name": "Ada Lovelace",
      // Index Ada's groups in her profile
      "groups": {
         // the value here doesn't matter, just that the key exists
         "techpioneers": true,
         "womentechmakers": true
      }
    },
    ...
  },
  "groups": {
    "techpioneers": {
      "name": "Historical Tech Pioneers",
      "members": {
        "alovelace": true,
        "ghopper": true,
        "eclarke": true
      }
    },
    ...
  }
}

আপনি লক্ষ্য করতে পারেন যে এটি অ্যাডার রেকর্ড এবং গ্রুপের অধীনে সম্পর্ক সংরক্ষণ করে কিছু ডেটার নকল করে। এখন alovelace একদল অধীনে সূচীবদ্ধ করা হয়, এবং techpioneers অদা এর প্রোফাইলে তালিকাভুক্ত করা হয়। সুতরাং গ্রুপ থেকে অ্যাডা মুছে ফেলার জন্য, এটি দুটি জায়গায় আপডেট করতে হবে।

দ্বিমুখী সম্পর্কের জন্য এটি একটি প্রয়োজনীয় অপ্রয়োজনীয়তা। এটি আপনাকে দ্রুত এবং দক্ষতার সাথে অ্যাডার সদস্যপদ আনতে দেয়, এমনকি যখন ব্যবহারকারীদের বা গোষ্ঠীর তালিকা লক্ষ লক্ষের মধ্যে দাঁড়ায় বা যখন রিয়েলটাইম ডেটাবেস সুরক্ষা বিধিগুলি কিছু রেকর্ড অ্যাক্সেস করতে বাধা দেয়।

এই পদ্ধতির, কী হিসেবে ID- র তালিকা এবং সত্য মান সেট করে ডেটা ইনভার্টারিং, পড়ার হিসাবে সহজ হিসাবে একটি কি 'র জন্য চেক তোলে /users/$uid/groups/$group_id এবং যদি তা না হয় পরীক্ষণ null । সূচকটি দ্রুত এবং একটি ভাল চুক্তি ডেটা জিজ্ঞাসা বা স্ক্যান করার চেয়ে বেশি দক্ষ।

পরবর্তী পদক্ষেপ