1. खास जानकारी
Google Cloud Spanner, पूरी तरह से मैनेज की गई हॉरिज़ॉन्टल तौर पर बढ़ाने वाली, दुनिया भर में डिस्ट्रिब्यूट की जाने वाली, रिलेशनल डेटाबेस सेवा है. यह परफ़ॉर्मेंस और ज़्यादा उपलब्धता को छोड़े बिना, ACID लेन-देन और SQL सिमैंटिक उपलब्ध कराती है.
इस लैब में, आपको Cloud Spanner इंस्टेंस को सेटअप करने का तरीका बताया जाएगा. आपको ऐसा डेटाबेस और स्कीमा बनाने का तरीका बताया जाएगा जिसका इस्तेमाल गेमिंग लीडरबोर्ड के लिए किया जा सकता है. सबसे पहले आपको एक प्लेयर टेबल बनानी होगी, जिसमें खिलाड़ी की जानकारी सेव की जा सकती है. साथ ही, खिलाड़ी के स्कोर को स्टोर करने के लिए एक स्कोर टेबल बनाई जाती है.
इसके बाद, टेबल में सैंपल डेटा का इस्तेमाल होगा. इसके बाद, टॉप 10 सैंपल क्वेरी चलाकर और आखिर में संसाधनों को खाली करने के लिए, इंस्टेंस को मिटाकर लैब को खत्म करें.
आपको इनके बारे में जानकारी मिलेगी
- Cloud Spanner इंस्टेंस सेट अप करने का तरीका.
- डेटाबेस और टेबल बनाने का तरीका.
- कमिट टाइमस्टैंप कॉलम को इस्तेमाल करने का तरीका.
- टाइमस्टैंप की मदद से, Cloud Spanner की डेटाबेस टेबल में डेटा लोड करने का तरीका.
- अपने क्लाउड स्पैनर डेटाबेस के लिए क्वेरी कैसे करें.
- Cloud Spanner इंस्टेंस मिटाने का तरीका.
आपको किन चीज़ों की ज़रूरत होगी
इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?
Google Cloud Platform के साथ अपने अनुभव को आप कितनी रेटिंग देंगे?
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेटअप करना
अगर आपके पास पहले से Google खाता (Gmail या Google Apps) नहीं है, तो आपको एक खाता बनाना होगा. Google Cloud Platform कंसोल ( console.cloud.google.com) में साइन इन करें और एक नया प्रोजेक्ट बनाएं.
अगर आपके पास पहले से कोई प्रोजेक्ट है, तो कंसोल के ऊपर बाईं ओर मौजूद, प्रोजेक्ट चुनने के लिए पुल डाउन मेन्यू पर क्लिक करें:
और 'नया प्रोजेक्ट' पर क्लिक करें बटन:
अगर आपके पास पहले से कोई प्रोजेक्ट नहीं है, तो आपको अपना पहला प्रोजेक्ट बनाने के लिए, इस तरह का डायलॉग बॉक्स दिखेगा:
इसके बाद, प्रोजेक्ट बनाने वाले डायलॉग बॉक्स की मदद से अपने नए प्रोजेक्ट की जानकारी डाली जा सकती है:
वह प्रोजेक्ट आईडी याद रखें जो Google Cloud के सभी प्रोजेक्ट के लिए एक यूनीक नाम होता है. ऊपर दिया गया नाम पहले ही किसी दूसरे प्रोजेक्ट के लिए इस्तेमाल किया जा चुका है. इसलिए, यह आपके लिए काम नहीं करेगा! बाद में, इस कोडलैब को इस कोडलैब में PROJECT_ID
के तौर पर दिखाया जाएगा.
इसके बाद, अगर आपने पहले से ऐसा नहीं किया है, तो आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Developers Console में बिलिंग चालू करनी होगी. साथ ही, Cloud Spanner API को चालू करना होगा.
इस कोडलैब को आज़माने के लिए आपको कुछ डॉलर से ज़्यादा खर्च नहीं करना चाहिए. हालांकि, अगर आप ज़्यादा संसाधनों का इस्तेमाल करने का फ़ैसला करते हैं या उन्हें बंद कर देते हैं, तो यह ज़्यादा हो सकता है (इस दस्तावेज़ के आखिर में "क्लीनअप" सेक्शन देखें). Google Cloud Spanner की कीमत की जानकारी यहां दी गई है.
Google Cloud Platform के नए उपयोगकर्ता 300 डॉलर के मुफ़्त में आज़माने की ज़रूरी शर्तें पूरी करते हैं. इसके तहत, कोडलैब का यह वर्शन बिना किसी शुल्क के इस्तेमाल किया जा सकता है.
Google Cloud Shell का सेटअप
Google Cloud और Spanner को आपके लैपटॉप से कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में हम Google Cloud Shell का इस्तेमाल करेंगे. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.
Debian आधारित इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाने में मदद मिलती है. इसका मतलब है कि इस कोडलैब के लिए आपको सिर्फ़ एक ब्राउज़र की ज़रूरत होगी. हां, यह Chromebook पर काम करता है.
- Cloud Console से Cloud Shell को चालू करने के लिए, Cloud Shell को चालू करें
पर क्लिक करें. प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा.
Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है. साथ ही, यह प्रोजेक्ट पहले से ही आपके PROJECT_ID
पर सेट है.
gcloud auth list
कमांड आउटपुट
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
कमांड आउटपुट
[core] project = <PROJECT_ID>
अगर किसी कारण से, प्रोजेक्ट सेट नहीं है, तो बस निम्न आदेश जारी करें:
gcloud config set project <PROJECT_ID>
क्या आपको अपना PROJECT_ID
चाहिए? देखें कि आपने सेटअप के चरणों में किस आईडी का इस्तेमाल किया है या इसे Cloud Console के डैशबोर्ड में देखें:
Cloud Shell, डिफ़ॉल्ट रूप से कुछ एनवायरमेंट वैरिएबल सेट करता है. ये वैरिएबल, आने वाले समय में कमांड चलाने के दौरान काम आ सकते हैं.
echo $GOOGLE_CLOUD_PROJECT
कमांड आउटपुट
<PROJECT_ID>
- आखिर में, डिफ़ॉल्ट ज़ोन और प्रोजेक्ट कॉन्फ़िगरेशन सेट करें.
gcloud config set compute/zone us-central1-f
आपके पास कई तरह के ज़ोन चुनने का विकल्प होता है. ज़्यादा जानकारी के लिए, क्षेत्र और ज़ोन.
खास जानकारी
इस चरण में, अपने एनवायरमेंट को सेटअप किया जाता है.
अगला वीडियो
इसके बाद, आपको Cloud Spanner इंस्टेंस सेट अप करना होगा.
3. Cloud Spanner इंस्टेंस सेट अप करना
इस चरण में, हम इस कोडलैब के लिए Cloud Spanner इंस्टेंस सेट अप करते हैं. सबसे ऊपर बाईं ओर मौजूद हैमबर्गर मेन्यू
में स्पैनर एंट्री खोजें या "/" दबाकर स्पैनर खोजें और "स्पैनर" लिखें
इसके बाद, पर क्लिक करें और अपने इंस्टेंस के लिए इंस्टेंस का नाम cloudspanner-leaderboard डालकर, एक कॉन्फ़िगरेशन चुनें (कोई क्षेत्रीय इंस्टेंस चुनें) और नोड की संख्या सेट करें. इस कोडलैब के लिए, हमें सिर्फ़ एक नोड की ज़रूरत होगी. प्रोडक्शन इंस्टेंस और Cloud Spanner एसएलए की ज़रूरी शर्तों को पूरा करने के लिए, आपको अपने Cloud Spanner इंस्टेंस में तीन या उससे ज़्यादा नोड चलाने होंगे.
आखिर में, "बनाएं" पर क्लिक करें. और कुछ ही सेकंड में आपके पास Cloud Spanner का इंस्टेंस उपलब्ध हो जाता है.
अगले चरण में, हम C# क्लाइंट लाइब्रेरी का इस्तेमाल करके, अपने नए इंस्टेंस में डेटाबेस और स्कीमा बना रहे हैं.
4. डेटाबेस और स्कीमा बनाना
इस चरण में, हम सैंपल डेटाबेस और स्कीमा बनाते हैं.
दो टेबल बनाने के लिए, C# क्लाइंट लाइब्रेरी का इस्तेमाल करें; खिलाड़ी की जानकारी के लिए खिलाड़ी टेबल और खिलाड़ी के स्कोर सेव करने के लिए 'स्कोर' टेबल. इसके लिए, हम Cloud Shell में C# कंसोल ऐप्लिकेशन बनाने का तरीका बताएंगे.
पहले Cloud Shell में यह कमांड टाइप करके, GitHub से इस कोडलैब के सैंपल कोड का क्लोन बनाएं:
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
इसके बाद, डायरेक्ट्री को "ऐप्लिकेशन" में बदलें वह डायरेक्ट्री जहां आप अपना ऐप्लिकेशन बनाएंगे.
cd dotnet-docs-samples/applications/
इस कोडलैब के लिए ज़रूरी सभी कोड, मौजूदा dotnet-docs-samples/applications/leaderboard
डायरेक्ट्री में Leaderboard
नाम के रन किए जा सकने वाले C# ऐप्लिकेशन के तौर पर मौजूद हैं, ताकि कोडलैब में आपकी प्रोग्रेस के साथ-साथ उसे रेफ़रंस के तौर पर इस्तेमाल किया जा सके. हम एक नई डायरेक्ट्री बनाएंगे और अलग-अलग चरणों में लीडरबोर्ड ऐप्लिकेशन की एक कॉपी बनाएंगे.
"कोडलैब" नाम की नई डायरेक्ट्री बनाएं और निम्न आदेश से इसमें निर्देशिका को बदलें:
mkdir codelab && cd $_
.NET C# कंसोल ऐप्लिकेशन बनाएं. इसका नाम "लीडरबोर्ड" है ऐसा करने के लिए:
dotnet new console -n Leaderboard
यह निर्देश एक सामान्य कंसोल ऐप्लिकेशन बनाता है जिसमें दो मुख्य फ़ाइलें, प्रोजेक्ट फ़ाइल Leaderboard.csproj
और प्रोग्राम फ़ाइल Program.cs
शामिल होती हैं.
चलो, इसे चलाते हैं. डायरेक्ट्री को नई लीडरबोर्ड डायरेक्ट्री में बदलें, जहां ऐप्लिकेशन मौजूद है:
cd Leaderboard
फिर इसे चलाने के लिए निम्न आदेश डालें.
dotnet run
आपको ऐप्लिकेशन का आउटपुट "Hey World!" दिखना चाहिए.
अब Program.cs
में बदलाव करके कंसोल ऐप्लिकेशन को अपडेट करते हैं, ताकि सी# स्पैनर क्लाइंट लाइब्रेरी का इस्तेमाल करके, दो टेबल वाले प्लेयर और स्कोर वाला लीडरबोर्ड बनाया जा सके. Cloud Shell Editor में जाकर ऐसा किया जा सकता है:
नीचे हाइलाइट किए गए आइकॉन पर क्लिक करके, क्लाउड शेल एडिटर खोलें:
इसके बाद, Program.cs
फ़ाइल को क्लाउड शेल एडिटर में खोलें. फ़ाइल के मौजूदा कोड को, leaderboard
डेटाबेस और Players
और Scores
टेबल बनाने के लिए ज़रूरी कोड से बदलें. इसके लिए, यहां दिए गए C# ऐप्लिकेशन कोड को Program.cs
फ़ाइल में चिपकाएं:
using System;
using System.Threading.Tasks;
using Google.Cloud.Spanner.Data;
using CommandLine;
namespace GoogleCloudSamples.Leaderboard
{
[Verb("create", HelpText = "Create a sample Cloud Spanner database "
+ "along with sample 'Players' and 'Scores' tables in your project.")]
class CreateOptions
{
[Value(0, HelpText = "The project ID of the project to use "
+ "when creating Cloud Spanner resources.", Required = true)]
public string projectId { get; set; }
[Value(1, HelpText = "The ID of the instance where the sample database "
+ "will be created.", Required = true)]
public string instanceId { get; set; }
[Value(2, HelpText = "The ID of the sample database to create.",
Required = true)]
public string databaseId { get; set; }
}
public class Program
{
enum ExitCode : int
{
Success = 0,
InvalidParameter = 1,
}
public static object Create(string projectId,
string instanceId, string databaseId)
{
var response =
CreateAsync(projectId, instanceId, databaseId);
Console.WriteLine("Waiting for operation to complete...");
response.Wait();
Console.WriteLine($"Operation status: {response.Status}");
Console.WriteLine($"Created sample database {databaseId} on "
+ $"instance {instanceId}");
return ExitCode.Success;
}
public static async Task CreateAsync(
string projectId, string instanceId, string databaseId)
{
// Initialize request connection string for database creation.
string connectionString =
$"Data Source=projects/{projectId}/instances/{instanceId}";
using (var connection = new SpannerConnection(connectionString))
{
string createStatement = $"CREATE DATABASE `{databaseId}`";
string[] createTableStatements = new string[] {
// Define create table statement for Players table.
@"CREATE TABLE Players(
PlayerId INT64 NOT NULL,
PlayerName STRING(2048) NOT NULL
) PRIMARY KEY(PlayerId)",
// Define create table statement for Scores table.
@"CREATE TABLE Scores(
PlayerId INT64 NOT NULL,
Score INT64 NOT NULL,
Timestamp TIMESTAMP NOT NULL OPTIONS(allow_commit_timestamp=true)
) PRIMARY KEY(PlayerId, Timestamp),
INTERLEAVE IN PARENT Players ON DELETE NO ACTION" };
// Make the request.
var cmd = connection.CreateDdlCommand(
createStatement, createTableStatements);
try
{
await cmd.ExecuteNonQueryAsync();
}
catch (SpannerException e) when
(e.ErrorCode == ErrorCode.AlreadyExists)
{
// OK.
}
}
}
public static int Main(string[] args)
{
var verbMap = new VerbMap<object>();
verbMap
.Add((CreateOptions opts) => Create(
opts.projectId, opts.instanceId, opts.databaseId))
.NotParsedFunc = (err) => 1;
return (int)verbMap.Run(args);
}
}
}
प्रोग्राम कोड के बारे में साफ़ तौर पर जानकारी देने के लिए, यहां प्रोग्राम का एक डायग्राम दिया गया है. इसमें प्रोग्राम के मुख्य कॉम्पोनेंट शामिल किए गए हैं:
create
कमांड को चालू करने के लिए कोड जोड़ने के बाद, आपकी Program.cs
फ़ाइल कैसी दिखनी चाहिए, इसका उदाहरण देखने के लिए, dotnet-docs-samples/applications/leaderboard/step4
डायरेक्ट्री में Program.cs
फ़ाइल का इस्तेमाल करें.
इसके बाद, प्रोग्राम की प्रोजेक्ट फ़ाइल Leaderboard.csproj
को खोलने और उसमें बदलाव करने के लिए, Cloud Shell Editor का इस्तेमाल करें. इसके बाद, फ़ाइल को अपडेट करके इस कोड की तरह बनाएं. पक्का करें कि आपने "फ़ाइल" का इस्तेमाल करके अपने सभी बदलाव सेव कर लिए हैं Cloud Shell Editor का मेन्यू खोलें.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Google.Cloud.Spanner.Data" Version="3.3.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\commandlineutil\Lib\CommandLineUtil.csproj" />
</ItemGroup>
</Project>
इस बदलाव के साथ, C# Spanner Nuget पैकेज Google.Cloud.Spanner.Data
में रेफ़रंस जोड़ा गया, ताकि हमें Cloud Spanner API के साथ इंटरैक्ट करना पड़े. इस बदलाव से, CommandLineUtil
प्रोजेक्ट में एक रेफ़रंस भी जुड़ जाएगा, जो dotnet-doc-सैंपल GitHub रिपॉज़िटरी का हिस्सा है. साथ ही, यह एक काम का "वर्बमैप" देता है ओपन सोर्स CommandLineParser
का एक्सटेंशन; कंसोल ऐप्लिकेशन के लिए कमांड लाइन इनपुट को मैनेज करने के लिए एक आसान लाइब्रेरी.
create
कमांड को चालू करने के लिए कोड जोड़ने के बाद, आपकी Leaderboard.csproj
फ़ाइल कैसी दिखनी चाहिए, इसका उदाहरण देखने के लिए, dotnet-docs-samples/applications/leaderboard/step4
डायरेक्ट्री में Leaderboard.csproj
फ़ाइल का इस्तेमाल करें.
अब आप अपडेट किए गए सैंपल को चलाने के लिए तैयार हैं. अपने अपडेट किए गए ऐप्लिकेशन का डिफ़ॉल्ट जवाब देखने के लिए यह लिखें:
dotnet run
आपको इस तरह का आउटपुट दिखेगा:
Leaderboard 1.0.0 Copyright (C) 2018 Leaderboard ERROR(S): No verb selected. create Create a sample Cloud Spanner database along with sample 'Players' and 'Scores' tables in your project. help Display more information on a specific command. version Display version information.
इस जवाब से हमें पता चला है कि यह Leaderboard
ऐप्लिकेशन है, जिसे इन तीन संभावित निर्देशों में से किसी एक की मदद से चलाया जा सकता है: create
, help
, और version
.
स्पैनर डेटाबेस और टेबल बनाने के लिए, create
कमांड इस्तेमाल करते हैं. कमांड के अनुमानित आर्ग्युमेंट देखने के लिए, कमांड को आर्ग्युमेंट के बिना चलाएं.
dotnet run create
आपको ऐसा जवाब दिखेगा:
Leaderboard 1.0.0 Copyright (C) 2018 Leaderboard ERROR(S): A required value not bound to option name is missing. --help Display this help screen. --version Display version information. value pos. 0 Required. The project ID of the project to use when creating Cloud Spanner resources. value pos. 1 Required. The ID of the instance where the sample database will be created. value pos. 2 Required. The ID of the sample database to create.
यहां हम देख सकते हैं कि create
कमांड के लिए आर्ग्युमेंट, प्रोजेक्ट आईडी, इंस्टेंस आईडी, और डेटाबेस आईडी हैं.
अब नीचे दिया गया कमांड चलाएं. पक्का करें कि आपने PROJECT_ID
की जगह वह प्रोजेक्ट आईडी डाला हो जिसे आपने कोडलैब की शुरुआत में बनाया था.
dotnet run create PROJECT_ID cloudspanner-leaderboard leaderboard
कुछ सेकंड के बाद, आपको कुछ ऐसा जवाब दिखेगा:
Waiting for operation to complete... Operation status: RanToCompletion Created sample database leaderboard on instance cloudspanner-leaderboard
Cloud Console के Cloud Spanner सेक्शन में, आपको बाईं ओर दिए गए मेन्यू में नया डेटाबेस और टेबल दिखेंगी.
अगले चरण में, हम अपने ऐप्लिकेशन को अपडेट करेंगे, ताकि आपके नए डेटाबेस में कुछ डेटा लोड किया जा सके.
5. डेटा लोड करें
अब हमारे पास leaderboard
नाम का एक डेटाबेस है, जिसमें दो टेबल हैं; Players
और Scores
. आइए, अब हमारी Players
टेबल को प्लेयर और Scores
टेबल को हर खिलाड़ी के रैंडम स्कोर से भरने के लिए, C# क्लाइंट लाइब्रेरी का इस्तेमाल करते हैं.
नीचे हाइलाइट किए गए आइकॉन पर क्लिक करके, क्लाउड शेल एडिटर खोलें:
इसके बाद, एक insert
कमांड जोड़ने के लिए, क्लाउड शेल एडिटर में Program.cs
फ़ाइल में बदलाव करें. इसका इस्तेमाल, Players
टेबल में 100 प्लेयर जोड़ने के लिए किया जा सकता है. इसके अलावा, इसका इस्तेमाल Players
टेबल में हर प्लेयर के लिए, Scores
टेबल में चार रैंडम स्कोर जोड़ने के लिए भी किया जा सकता है.
पहले "Verbmap" में नया insert
कमांड ब्लॉक जोड़ें प्रोग्राम में सबसे ऊपर मौजूद create
कमांड ब्लॉक के नीचे मौजूद है:
[Verb("insert", HelpText = "Insert sample 'players' records or 'scores' records "
+ "into the database.")]
class InsertOptions
{
[Value(0, HelpText = "The project ID of the project to use "
+ "when managing Cloud Spanner resources.", Required = true)]
public string projectId { get; set; }
[Value(1, HelpText = "The ID of the instance where the sample database resides.",
Required = true)]
public string instanceId { get; set; }
[Value(2, HelpText = "The ID of the database where the sample database resides.",
Required = true)]
public string databaseId { get; set; }
[Value(3, HelpText = "The type of insert to perform, 'players' or 'scores'.",
Required = true)]
public string insertType { get; set; }
}
इसके बाद, मौजूदा CreateAsync
तरीके के नीचे Insert
, InsertPlayersAsync
, और InsertScoresAsync
तरीके जोड़ें:
public static object Insert(string projectId,
string instanceId, string databaseId, string insertType)
{
if (insertType.ToLower() == "players")
{
var responseTask =
InsertPlayersAsync(projectId, instanceId, databaseId);
Console.WriteLine("Waiting for insert players operation to complete...");
responseTask.Wait();
Console.WriteLine($"Operation status: {responseTask.Status}");
}
else if (insertType.ToLower() == "scores")
{
var responseTask =
InsertScoresAsync(projectId, instanceId, databaseId);
Console.WriteLine("Waiting for insert scores operation to complete...");
responseTask.Wait();
Console.WriteLine($"Operation status: {responseTask.Status}");
}
else
{
Console.WriteLine("Invalid value for 'type of insert'. "
+ "Specify 'players' or 'scores'.");
return ExitCode.InvalidParameter;
}
Console.WriteLine($"Inserted {insertType} into sample database "
+ $"{databaseId} on instance {instanceId}");
return ExitCode.Success;
}
public static async Task InsertPlayersAsync(string projectId,
string instanceId, string databaseId)
{
string connectionString =
$"Data Source=projects/{projectId}/instances/{instanceId}"
+ $"/databases/{databaseId}";
long numberOfPlayers = 0;
using (var connection = new SpannerConnection(connectionString))
{
await connection.OpenAsync();
await connection.RunWithRetriableTransactionAsync(async (transaction) =>
{
// Execute a SQL statement to get current number of records
// in the Players table to use as an incrementing value
// for each PlayerName to be inserted.
var cmd = connection.CreateSelectCommand(
@"SELECT Count(PlayerId) as PlayerCount FROM Players");
numberOfPlayers = await cmd.ExecuteScalarAsync<long>();
// Insert 100 player records into the Players table.
SpannerBatchCommand cmdBatch = connection.CreateBatchDmlCommand();
for (int i = 0; i < 100; i++)
{
numberOfPlayers++;
SpannerCommand cmdInsert = connection.CreateDmlCommand(
"INSERT INTO Players "
+ "(PlayerId, PlayerName) "
+ "VALUES (@PlayerId, @PlayerName)",
new SpannerParameterCollection {
{"PlayerId", SpannerDbType.Int64},
{"PlayerName", SpannerDbType.String}});
cmdInsert.Parameters["PlayerId"].Value =
Math.Abs(Guid.NewGuid().GetHashCode());
cmdInsert.Parameters["PlayerName"].Value =
$"Player {numberOfPlayers}";
cmdBatch.Add(cmdInsert);
}
await cmdBatch.ExecuteNonQueryAsync();
});
}
Console.WriteLine("Done inserting player records...");
}
public static async Task InsertScoresAsync(
string projectId, string instanceId, string databaseId)
{
string connectionString =
$"Data Source=projects/{projectId}/instances/{instanceId}"
+ $"/databases/{databaseId}";
// Insert 4 score records into the Scores table for each player
// in the Players table.
using (var connection = new SpannerConnection(connectionString))
{
await connection.OpenAsync();
await connection.RunWithRetriableTransactionAsync(async (transaction) =>
{
Random r = new Random();
bool playerRecordsFound = false;
SpannerBatchCommand cmdBatch =
connection.CreateBatchDmlCommand();
var cmdLookup =
connection.CreateSelectCommand("SELECT * FROM Players");
using (var reader = await cmdLookup.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
playerRecordsFound = true;
for (int i = 0; i < 4; i++)
{
DateTime randomTimestamp = DateTime.Now
.AddYears(r.Next(-2, 1))
.AddMonths(r.Next(-12, 1))
.AddDays(r.Next(-28, 0))
.AddHours(r.Next(-24, 0))
.AddSeconds(r.Next(-60, 0))
.AddMilliseconds(r.Next(-100000, 0));
SpannerCommand cmdInsert =
connection.CreateDmlCommand(
"INSERT INTO Scores "
+ "(PlayerId, Score, Timestamp) "
+ "VALUES (@PlayerId, @Score, @Timestamp)",
new SpannerParameterCollection {
{"PlayerId", SpannerDbType.Int64},
{"Score", SpannerDbType.Int64},
{"Timestamp",
SpannerDbType.Timestamp}});
cmdInsert.Parameters["PlayerId"].Value =
reader.GetFieldValue<int>("PlayerId");
cmdInsert.Parameters["Score"].Value =
r.Next(1000, 1000001);
cmdInsert.Parameters["Timestamp"].Value =
randomTimestamp.ToString("o");
cmdBatch.Add(cmdInsert);
}
}
if (!playerRecordsFound)
{
Console.WriteLine("Parameter 'scores' is invalid "
+ "since no player records currently exist. First "
+ "insert players then insert scores.");
Environment.Exit((int)ExitCode.InvalidParameter);
}
else
{
await cmdBatch.ExecuteNonQueryAsync();
Console.WriteLine(
"Done inserting score records..."
);
}
}
});
}
}
इसके बाद, insert
कमांड को फ़ंक्शनल बनाने के लिए, अपने प्रोग्राम के "मुख्य" में इस कोड को जोड़ें तरीका:
.Add((InsertOptions opts) => Insert(
opts.projectId, opts.instanceId, opts.databaseId, opts.insertType))
insert
कमांड को चालू करने के लिए कोड जोड़ने के बाद, आपकी Program.cs
फ़ाइल कैसी दिखनी चाहिए, इसका उदाहरण देखने के लिए, dotnet-docs-samples/applications/leaderboard/step5
डायरेक्ट्री में Program.cs
फ़ाइल का इस्तेमाल करें.
अब प्रोग्राम को यह पुष्टि करने के लिए चलाएं कि नया insert
कमांड, प्रोग्राम के संभावित निर्देशों की सूची में शामिल हो. नीचे दिया गया निर्देश चलाएं:
dotnet run
आपको प्रोग्राम के डिफ़ॉल्ट आउटपुट में अब insert
कमांड दिखेगा:
Leaderboard 1.0.0 Copyright (C) 2018 Leaderboard ERROR(S): No verb selected. create Create a sample Cloud Spanner database along with sample 'Players' and 'Scores' tables in your project. insert Insert sample 'players' records or 'scores' records into the database. help Display more information on a specific command. version Display version information.
अब इसके इनपुट आर्ग्युमेंट देखने के लिए, insert
कमांड चलाते हैं. नीचे दिया गया निर्देश डालें.
dotnet run insert
इससे यह जवाब मिलेगा:
Leaderboard 1.0.0 Copyright (C) 2018 Leaderboard ERROR(S): A required value not bound to option name is missing. --help Display this help screen. --version Display version information. value pos. 0 Required. The project ID of the project to use when managing Cloud Spanner resources. value pos. 1 Required. The ID of the instance where the sample database resides. value pos. 2 Required. The ID of the database where the sample database resides. value pos. 3 Required. The type of insert to perform, 'players' or 'scores'.
रिस्पॉन्स से यह देखा जा सकता है कि प्रोजेक्ट आईडी, इंस्टेंस आईडी, और डेटाबेस आईडी के अलावा, "इंसर्ट का टाइप" फ़ील्ड में एक और आर्ग्युमेंट value pos. 3
होना चाहिए. करने के लिए. इस तर्क में 'खिलाड़ी' का मान हो सकता है या ‘स्कोर'.
अब "प्लेयर" जोड़कर, insert
कमांड को उन्हीं आर्ग्युमेंट वैल्यू के साथ चलाएं जिनका इस्तेमाल हमने create
कमांड करते समय किया था जैसा कि अतिरिक्त "इन्सर्ट का टाइप" तर्क है. पक्का करें कि आपने PROJECT_ID
की जगह वह प्रोजेक्ट आईडी डाला हो जिसे आपने कोडलैब की शुरुआत में बनाया था.
dotnet run insert PROJECT_ID cloudspanner-leaderboard leaderboard players
कुछ सेकंड के बाद, आपको कुछ ऐसा जवाब दिखेगा:
Waiting for insert players operation to complete... Done inserting player records... Operation status: RanToCompletion Inserted players into sample database leaderboard on instance cloudspanner-leaderboard
अब हम C# क्लाइंट लाइब्रेरी का इस्तेमाल करके, अपनी Scores
टेबल में, Players
टेबल में हर खिलाड़ी के लिए टाइमस्टैंप के साथ चार रैंडम स्कोर उपलब्ध कराते हैं.
Scores
टेबल के Timestamp
कॉलम को "टाइमस्टैंप" के तौर पर बताया गया था कॉलम को नीचे दिए गए SQL स्टेटमेंट से प्रज़ेंट करें. इसे तब चलाया गया था, जब हमने पहले create
निर्देश चलाया था:
CREATE TABLE Scores(
PlayerId INT64 NOT NULL,
Score INT64 NOT NULL,
Timestamp TIMESTAMP NOT NULL OPTIONS(allow_commit_timestamp=true)
) PRIMARY KEY(PlayerId, Timestamp),
INTERLEAVE IN PARENT Players ON DELETE NO ACTION
OPTIONS(allow_commit_timestamp=true)
एट्रिब्यूट पर ध्यान दें. इससे Timestamp
एक "टाइमस्टैंप जोड़ेगा" बन जाएगा कॉलम में डाली गई जानकारी से, टेबल की दी गई किसी पंक्ति में INSERT और UPDATE कार्रवाइयों के लेन-देन के सटीक टाइमस्टैंप के साथ अपने-आप जानकारी भर जाती है.
"टाइमस्टैंप जोड़े" में अपने टाइमस्टैंप की वैल्यू भी डाली जा सकती हैं कॉलम में एक टाइमस्टैंप शामिल करके, पुरानी वैल्यू के साथ टाइमस्टैंप डाला जाएगा. हम इस कोडलैब के मकसद को पूरा करने के लिए ऐसा करेंगे.
अब insert
कमांड को उन्हीं आर्ग्युमेंट वैल्यू के साथ चलाएं जिनका इस्तेमाल हमने create
कमांड में "स्कोर" जोड़ते समय किया था जैसा कि अतिरिक्त "इन्सर्ट का टाइप" तर्क है. पक्का करें कि आपने PROJECT_ID
की जगह वह प्रोजेक्ट आईडी डाला हो जिसे आपने कोडलैब की शुरुआत में बनाया था.
dotnet run insert PROJECT_ID cloudspanner-leaderboard leaderboard scores
कुछ सेकंड के बाद, आपको कुछ ऐसा जवाब दिखेगा:
Waiting for insert players operation to complete... Done inserting player records... Operation status: RanToCompletion Inserted players into sample database leaderboard on instance cloudspanner-leaderboard
"इन्सर्ट के टाइप" के साथ insert
चल रहा है जिसे scores
के तौर पर कॉल किया गया है, InsertScoresAsync
तरीके को कॉल करता है. यह तरीका, बिना किसी क्रम के जनरेट किया गया टाइमस्टैंप डालने के लिए इन कोड स्निपेट का इस्तेमाल करता है. इस तरीके में, किसी बीती हुई तारीख और समय को शामिल किया जाता है:
DateTime randomTimestamp = DateTime.Now
.AddYears(r.Next(-2, 1))
.AddMonths(r.Next(-12, 1))
.AddDays(r.Next(-28, 0))
.AddHours(r.Next(-24, 0))
.AddSeconds(r.Next(-60, 0))
.AddMilliseconds(r.Next(-100000, 0));
...
cmdInsert.Parameters["Timestamp"].Value = randomTimestamp.ToString("o");
Timestamp
कॉलम में, "शामिल करें" कॉलम के टाइमस्टैंप अपने-आप भरने के लिए ट्रांज़ैक्शन होता है, तो आपके पास यहां दिए गए कोड स्निपेट की तरह, C# कॉन्सटेंट SpannerParameter.CommitTimestamp
डालने का विकल्प है:
cmd.Parameters["Timestamp"].Value = SpannerParameter.CommitTimestamp;
अब जबकि हमने डेटा लोड करना पूरा कर लिया है, तो आइए उन वैल्यू की पुष्टि करते हैं जिन्हें हमने अभी-अभी अपनी नई टेबल में लिखा है. पहले leaderboard
डेटाबेस चुनें. इसके बाद, Players
टेबल चुनें. Data
टैब पर क्लिक करें. आपको टेबल के PlayerId
और PlayerName
कॉलम में डेटा दिखेगा.
आइए, Scores
टेबल पर क्लिक करके Data
टैब चुनकर यह पुष्टि करें कि स्कोर टेबल में भी डेटा मौजूद है. आपको दिखाई देगा कि आपके पास टेबल के PlayerId
, Timestamp
, और Score
कॉलम में डेटा है.
बहुत खूब! कुछ ऐसी क्वेरी चलाने के लिए अपने प्रोग्राम को अपडेट करते हैं जिनका इस्तेमाल हम गेमिंग लीडरबोर्ड बनाने में कर सकते हैं.
6. लीडरबोर्ड क्वेरी चलाएं
अब हमने अपना डेटाबेस सेट अप कर लिया है और अपनी टेबल में जानकारी लोड कर दी है, तो अब इस डेटा का इस्तेमाल करके लीडरबोर्ड बनाते हैं. ऐसा करने के लिए, हमें इन चार सवालों के जवाब देने होंगे:
- कौनसे खिलाड़ी "टॉप 10" खिलाड़ी हैं हर समय का?
- कौनसे खिलाड़ी "टॉप 10" खिलाड़ी हैं का सुझाव दिया है?
- कौनसे खिलाड़ी "टॉप 10" खिलाड़ी हैं महीने का?
- कौनसे खिलाड़ी "टॉप 10" खिलाड़ी हैं सप्ताह का?
एसक्यूएल क्वेरी चलाने के लिए, अपने प्रोग्राम को अपडेट करें, जिससे इन सवालों के जवाब मिलेंगे.
हम एक query
कमांड जोड़ेंगे, जो उन सवालों के जवाब देने के लिए क्वेरी चलाने का तरीका देगी जिनसे हमारे लीडरबोर्ड के लिए ज़रूरी जानकारी तैयार होगी.
प्रोग्राम को अपडेट करने के लिए, Cloud Shell Editor में Program.cs
फ़ाइल में बदलाव करें, ताकि query
कमांड जोड़ा जा सके.
पहले "Verbmap" में नया query
कमांड ब्लॉक जोड़ें प्रोग्राम में सबसे ऊपर मौजूद insert
कमांड ब्लॉक के नीचे मौजूद है:
[Verb("query", HelpText = "Query players with 'Top Ten' scores within a specific timespan "
+ "from sample Cloud Spanner database table.")]
class QueryOptions
{
[Value(0, HelpText = "The project ID of the project to use "
+ "when managing Cloud Spanner resources.", Required = true)]
public string projectId { get; set; }
[Value(1, HelpText = "The ID of the instance where the sample data resides.",
Required = true)]
public string instanceId { get; set; }
[Value(2, HelpText = "The ID of the database where the sample data resides.",
Required = true)]
public string databaseId { get; set; }
[Value(3, Default = 0, HelpText = "The timespan in hours that will be used to filter the "
+ "results based on a record's timestamp. The default will return the "
+ "'Top Ten' scores of all time.")]
public int timespan { get; set; }
}
इसके बाद, मौजूदा InsertScoresAsync
तरीके के नीचे, Query
और QueryAsync
तरीके जोड़ें:
public static object Query(string projectId,
string instanceId, string databaseId, int timespan)
{
var response = QueryAsync(
projectId, instanceId, databaseId, timespan);
response.Wait();
return ExitCode.Success;
}
public static async Task QueryAsync(
string projectId, string instanceId, string databaseId, int timespan)
{
string connectionString =
$"Data Source=projects/{projectId}/instances/"
+ $"{instanceId}/databases/{databaseId}";
// Create connection to Cloud Spanner.
using (var connection = new SpannerConnection(connectionString))
{
string sqlCommand;
if (timespan == 0)
{
// No timespan specified. Query Top Ten scores of all time.
sqlCommand =
@"SELECT p.PlayerId, p.PlayerName, s.Score, s.Timestamp
FROM Players p
JOIN Scores s ON p.PlayerId = s.PlayerId
ORDER BY s.Score DESC LIMIT 10";
}
else
{
// Query Top Ten scores filtered by the timepan specified.
sqlCommand =
$@"SELECT p.PlayerId, p.PlayerName, s.Score, s.Timestamp
FROM Players p
JOIN Scores s ON p.PlayerId = s.PlayerId
WHERE s.Timestamp >
TIMESTAMP_SUB(CURRENT_TIMESTAMP(),
INTERVAL {timespan.ToString()} HOUR)
ORDER BY s.Score DESC LIMIT 10";
}
var cmd = connection.CreateSelectCommand(sqlCommand);
using (var reader = await cmd.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
Console.WriteLine("PlayerId : "
+ reader.GetFieldValue<string>("PlayerId")
+ " PlayerName : "
+ reader.GetFieldValue<string>("PlayerName")
+ " Score : "
+ string.Format("{0:n0}",
Int64.Parse(reader.GetFieldValue<string>("Score")))
+ " Timestamp : "
+ reader.GetFieldValue<string>("Timestamp").Substring(0, 10));
}
}
}
}
इसके बाद, query
कमांड को फ़ंक्शनल बनाने के लिए, अपने प्रोग्राम के "मुख्य" में इस कोड को जोड़ें तरीका:
.Add((QueryOptions opts) => Query(
opts.projectId, opts.instanceId, opts.databaseId, opts.timespan))
query
कमांड को चालू करने के लिए कोड जोड़ने के बाद, आपकी Program.cs
फ़ाइल कैसी दिखनी चाहिए, इसका उदाहरण देखने के लिए, dotnet-docs-samples/applications/leaderboard/step6
डायरेक्ट्री में Program.cs
फ़ाइल का इस्तेमाल करें.
अब प्रोग्राम को यह पुष्टि करने के लिए चलाएं कि नया query
कमांड, प्रोग्राम के संभावित निर्देशों की सूची में शामिल हो. नीचे दिया गया निर्देश चलाएं:
dotnet run
आपको प्रोग्राम के डिफ़ॉल्ट आउटपुट में, निर्देश देने के नए विकल्प के तौर पर अब query
कमांड दिखेगा:
Leaderboard 1.0.0 Copyright (C) 2018 Leaderboard ERROR(S): No verb selected. create Create a sample Cloud Spanner database along with sample 'Players' and 'Scores' tables in your project. insert Insert sample 'players' records or 'scores' records into the database. query Query players with 'Top Ten' scores within a specific timespan from sample Cloud Spanner database table. help Display more information on a specific command. version Display version information.
अब इसके इनपुट आर्ग्युमेंट देखने के लिए, query
कमांड चलाते हैं. नीचे दिए गए कमांड डालें:
dotnet run query
इससे यह जवाब मिलेगा:
Leaderboard 1.0.0 Copyright (C) 2018 Leaderboard ERROR(S): A required value not bound to option name is missing. --help Display this help screen. --version Display version information. value pos. 0 Required. The project ID of the project to use when managing Cloud Spanner resources. value pos. 1 Required. The ID of the instance where the sample data resides. value pos. 2 Required. The ID of the database where the sample data resides. value pos. 3 (Default: 0) The timespan in hours that will be used to filter the results based on a record's timestamp. The default will return the 'Top Ten' scores of all time.
इस रिस्पॉन्स से यह देखा जा सकता है कि प्रोजेक्ट आईडी, इंस्टेंस आईडी, और डेटाबेस आईडी के अलावा, एक और आर्ग्युमेंट value pos. 3
होना चाहिए. इससे हमें Scores
टेबल के Timestamp
कॉलम में, रिकॉर्ड की वैल्यू के आधार पर फ़िल्टर करने के लिए घंटों की समयावधि तय करने की अनुमति मिलती है. इस आर्ग्युमेंट की डिफ़ॉल्ट वैल्यू 0 है. इसका मतलब है कि टाइमस्टैंप के हिसाब से कोई भी रिकॉर्ड फ़िल्टर नहीं किया जाएगा. इसलिए, हम "टाइमस्पैन" के बिना query
कमांड का इस्तेमाल कर सकते हैं हमारे "शीर्ष दस" की सूची पाने के लिए मान हर समय के बेहतर खिलाड़ी.
"टाइमस्पैन" बताए बिना query
कमांड को रन करते हैं. इसके लिए उन ही आर्ग्युमेंट वैल्यू का इस्तेमाल किया जाता है जिनका इस्तेमाल हमने create
कमांड को रन करते समय किया था. पक्का करें कि आपने PROJECT_ID
की जगह वह प्रोजेक्ट आईडी डाला हो जिसे आपने कोडलैब की शुरुआत में बनाया था.
dotnet run query PROJECT_ID cloudspanner-leaderboard leaderboard
आपको एक जवाब दिखेगा, जिसमें "टॉप 10" कॉन्टेंट शामिल होगा ये आंकड़े हैं:
PlayerId : 1843159180 PlayerName : Player 87 Score : 998,955 Timestamp : 2016-03-23
PlayerId : 61891198 PlayerName : Player 19 Score : 998,720 Timestamp : 2016-03-26
PlayerId : 340906298 PlayerName : Player 48 Score : 993,302 Timestamp : 2015-08-27
PlayerId : 541473117 PlayerName : Player 22 Score : 991,368 Timestamp : 2018-04-30
PlayerId : 857460496 PlayerName : Player 68 Score : 988,010 Timestamp : 2015-05-25
PlayerId : 1826646419 PlayerName : Player 91 Score : 984,022 Timestamp : 2016-11-26
PlayerId : 1002199735 PlayerName : Player 35 Score : 982,933 Timestamp : 2015-09-26
PlayerId : 2002563755 PlayerName : Player 23 Score : 979,041 Timestamp : 2016-10-25
PlayerId : 1377548191 PlayerName : Player 2 Score : 978,632 Timestamp : 2016-05-02
PlayerId : 1358098565 PlayerName : Player 65 Score : 973,257 Timestamp : 2016-10-30
अब "टॉप टेन" की क्वेरी करने के लिए, ज़रूरी आर्ग्युमेंट के साथ query
कमांड चलाते हैं "टाइमस्पैन" तय करके साल के बेहतरीन खिलाड़ी साल के घंटों की संख्या के बराबर है, जो 8,760 है. पक्का करें कि आपने PROJECT_ID
की जगह वह प्रोजेक्ट आईडी डाला हो जिसे आपने कोडलैब की शुरुआत में बनाया था.
dotnet run query PROJECT_ID cloudspanner-leaderboard leaderboard 8760
आपको एक जवाब दिखेगा, जिसमें "टॉप 10" कॉन्टेंट शामिल होगा साल के चुनिंदा खिलाड़ी:
PlayerId : 541473117 PlayerName : Player 22 Score : 991,368 Timestamp : 2018-04-30
PlayerId : 228469898 PlayerName : Player 82 Score : 967,177 Timestamp : 2018-01-26
PlayerId : 1131343000 PlayerName : Player 26 Score : 944,725 Timestamp : 2017-05-26
PlayerId : 396780730 PlayerName : Player 41 Score : 929,455 Timestamp : 2017-09-26
PlayerId : 61891198 PlayerName : Player 19 Score : 921,251 Timestamp : 2018-05-01
PlayerId : 634269851 PlayerName : Player 54 Score : 909,379 Timestamp : 2017-07-24
PlayerId : 821111159 PlayerName : Player 55 Score : 908,402 Timestamp : 2017-05-25
PlayerId : 228469898 PlayerName : Player 82 Score : 889,040 Timestamp : 2017-12-26
PlayerId : 1408782275 PlayerName : Player 27 Score : 874,124 Timestamp : 2017-09-24
PlayerId : 1002199735 PlayerName : Player 35 Score : 864,758 Timestamp : 2018-04-24
अब "टॉप टेन" के बारे में क्वेरी करने के लिए query
कमांड चलाकर देखते हैं "समयावधि" तय करके, महीने के बेहतरीन खिलाड़ी महीने के घंटों की संख्या के बराबर है, जो 730 है. पक्का करें कि आपने PROJECT_ID
की जगह वह प्रोजेक्ट आईडी डाला हो जिसे आपने कोडलैब की शुरुआत में बनाया था.
dotnet run query PROJECT_ID cloudspanner-leaderboard leaderboard 730
आपको एक जवाब दिखेगा, जिसमें "टॉप 10" कॉन्टेंट शामिल होगा नीचे दिए गए प्लेयर की तरह:
PlayerId : 541473117 PlayerName : Player 22 Score : 991,368 Timestamp : 2018-04-30
PlayerId : 61891198 PlayerName : Player 19 Score : 921,251 Timestamp : 2018-05-01
PlayerId : 1002199735 PlayerName : Player 35 Score : 864,758 Timestamp : 2018-04-24
PlayerId : 1228490432 PlayerName : Player 11 Score : 682,033 Timestamp : 2018-04-26
PlayerId : 648239230 PlayerName : Player 92 Score : 653,895 Timestamp : 2018-05-02
PlayerId : 70762849 PlayerName : Player 77 Score : 598,074 Timestamp : 2018-04-22
PlayerId : 1671215342 PlayerName : Player 62 Score : 506,770 Timestamp : 2018-04-28
PlayerId : 1208850523 PlayerName : Player 21 Score : 216,008 Timestamp : 2018-04-30
PlayerId : 1587692674 PlayerName : Player 63 Score : 188,157 Timestamp : 2018-04-25
PlayerId : 992391797 PlayerName : Player 37 Score : 167,175 Timestamp : 2018-04-30
अब "टॉप टेन" के बारे में क्वेरी करने के लिए query
कमांड चलाकर देखते हैं "समयावधि" तय करके, हफ़्ते के बेहतरीन खिलाड़ी एक हफ़्ते में घंटों की संख्या के बराबर है, जो 168 है. पक्का करें कि आपने PROJECT_ID
की जगह वह प्रोजेक्ट आईडी डाला हो जिसे आपने कोडलैब की शुरुआत में बनाया था.
dotnet run query PROJECT_ID cloudspanner-leaderboard leaderboard 168
आपको एक जवाब दिखेगा, जिसमें "टॉप 10" कॉन्टेंट शामिल होगा दिए गए हैं, जैसे कि:
PlayerId : 541473117 PlayerName : Player 22 Score : 991,368 Timestamp : 2018-04-30
PlayerId : 61891198 PlayerName : Player 19 Score : 921,251 Timestamp : 2018-05-01
PlayerId : 228469898 PlayerName : Player 82 Score : 853,602 Timestamp : 2018-04-28
PlayerId : 1131343000 PlayerName : Player 26 Score : 695,318 Timestamp : 2018-04-30
PlayerId : 1228490432 PlayerName : Player 11 Score : 682,033 Timestamp : 2018-04-26
PlayerId : 1408782275 PlayerName : Player 27 Score : 671,827 Timestamp : 2018-04-27
PlayerId : 648239230 PlayerName : Player 92 Score : 653,895 Timestamp : 2018-05-02
PlayerId : 816861444 PlayerName : Player 83 Score : 622,277 Timestamp : 2018-04-27
PlayerId : 162043954 PlayerName : Player 75 Score : 572,634 Timestamp : 2018-05-02
PlayerId : 1671215342 PlayerName : Player 62 Score : 506,770 Timestamp : 2018-04-28
बहुत बढ़िया!
अब जैसे ही आप रिकॉर्ड जोड़ते हैं, स्पैनर आपके डेटाबेस को स्केल करके उस बड़े स्तर पर ले आता है, जिसकी आपको ज़रूरत है.
भले ही आपके डेटाबेस में कितनी भी बढ़ोतरी हो, लेकिन Spanner और इसकी Truetime टेक्नोलॉजी की मदद से आपके गेम का लीडरबोर्ड सटीक तरीके से लगातार आगे बढ़ सकता है.
7. साफ़-सफ़ाई सेवा
Spanner के साथ खेलने का आनंद लेने के बाद, हमें अपने खेल के मैदान को साफ़ करना होगा, जिससे कीमती संसाधनों और पैसों की बचत होगी. अच्छी बात यह है कि यह एक आसान चरण है. बस डेवलपर कंसोल में जाएं और "क्लाउड स्पैनर इंस्टेंस सेट करें" नाम के कोडलैब चरण में बनाए गए इंस्टेंस को मिटाएं.
8. बधाई हो!
हमने इन विषयों के बारे में बात की:
- लीडरबोर्ड के लिए Google Cloud स्पैनर इंस्टेंस, डेटाबेस, और टेबल स्कीमा
- .NET Core C# कंसोल ऐप्लिकेशन बनाने का तरीका
- C# क्लाइंट लाइब्रेरी का इस्तेमाल करके स्पैनर डेटाबेस और टेबल बनाने का तरीका
- C# क्लाइंट लाइब्रेरी का इस्तेमाल करके, स्पैनर डेटाबेस में डेटा लोड करने का तरीका
- "टॉप 10" से जुड़ी क्वेरी करने का तरीका स्पैनर कमिट टाइमस्टैंप और C# क्लाइंट लाइब्रेरी का इस्तेमाल करके आपके डेटा के नतीजे
अगले चरण:
- स्पैनर कैप व्हाइट पेपर पढ़ें
- स्कीमा डिज़ाइन और क्वेरी के सबसे सही तरीकों के बारे में जानें
- Cloud Spanner के कमिट टाइमस्टैंप के बारे में ज़्यादा जानें
हमें अपना सुझाव/राय दें या शिकायत करें
- कृपया थोड़ा समय निकालकर, हमारे बहुत छोटे से सर्वे को पूरा करें