ডাটাবেসের পরিবর্তে ডেটা স্টোরগুলিতে কীভাবে ভাববেন?


183

উদাহরণ হিসাবে, গুগল অ্যাপ ইঞ্জিন ডেটা সঞ্চয় করতে গুগল ডেটাস্টোর ব্যবহার করে, কোনও স্ট্যান্ডার্ড ডাটাবেস নয়। গুগল ডেটাস্টোর ব্যবহারের জন্য ডাটাবেসের পরিবর্তে কারও কাছে কোনও পরামর্শ আছে? দেখে মনে হচ্ছে যে আমি আমার মনকে 100% অবজেক্টের সম্পর্কের বিষয়ে চিন্তা করতে প্রশিক্ষণ দিয়েছি যা সরাসরি টেবিলের কাঠামোগুলিতে ম্যাপ করে এবং এখন অন্যরকম কিছু দেখতে পাওয়া শক্ত। আমি গুগল ডেটাস্টোরের কিছু সুবিধা (উদাহরণস্বরূপ কর্মক্ষমতা এবং ডেটা বিতরণ করার ক্ষমতা) বুঝতে পারি, তবে কিছু ভাল ডাটাবেস কার্যকারিতা ত্যাগ করা হয় (যেমন যোগ দেয়)।

গুগল ডেটাস্টোর বা বিগ টেবিলের সাথে কাজ করা কারও কি তাদের সাথে কাজ করার জন্য কোনও ভাল পরামর্শ আছে?


ডেটাসোর্স হ'ল একটি পুরানো এপিআই যা আমরা ধীরে ধীরে মুছে ফেলছি - এটি একটি ডাটাবেস সংযোগ মডেলের সাথে খুব আবদ্ধ ছিল। ডেটাস্টোর হ'ল নিম্ন স্তরের এপিআই যা ফিচাররেডার এবং ফিচার রাইটার ব্যবহার করে জিআইএস সামগ্রীতে "কাঁচা" স্ট্রিমিং ভিত্তিক পদ্ধতির অ্যাক্সেসের অনুমতি দেয়।
মুরালি

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

আপনি মুনগো ডেটাস্টোর এপিআই চেক করতে চাইতে পারেন: bit.ly/13eSDpr
কোয়ার্কস

উত্তর:


149

'Traditionalতিহ্যবাহী' সম্পর্কযুক্ত ডাটাবেসগুলির সাথে তুলনা করার সময় অ্যাপ ইঞ্জিন ডেটাস্টোর সম্পর্কে অভ্যস্ত হওয়ার জন্য দুটি প্রধান জিনিস রয়েছে:

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

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

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

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

আপনি কীভাবে ডেটা উপস্থাপন করবেন তা পরিবর্তন করার ক্ষেত্রে, সবচেয়ে গুরুত্বপূর্ণ বিষয় হ'ল প্রাক-গণনা। ক্যোয়ারির সময় যোগদানের পরিবর্তে, ডেটাস্ট্যাকুলেট করে ডেটাস্টোরে যেখানেই সম্ভব সংরক্ষণ করুন। আপনি যদি কোনও র্যান্ডম রেকর্ড চয়ন করতে চান তবে একটি এলোমেলো সংখ্যা তৈরি করুন এবং প্রতিটি রেকর্ডের সাথে এটি সঞ্চয় করুন। সেখানে টিপস এবং ট্রিকস এই ধরণের একটি সম্পূর্ণ পাকপ্রণালীর এর এখানে সম্পাদনা: পাকপ্রণালীর নেই অস্তিত্ব।


4
সুসংবাদ, ইন্টারনেট কুকবুক সম্পর্কে ভুলেনি, ইন্টারনেট আর্কাইভটি ভুলেনি। সাইটের ভূত এখনও এখানে বিদ্যমান: web.archive.org/web/20090416113704/http://…
ইজিলি বব্লড

42

আমি যেভাবে মাইন্ড স্যুইচটি নিয়ে চলেছি তা হ'ল সম্পূর্ণভাবে ডাটাবেসটি ভুলে যাওয়া।

রিলেশনাল ডিবি ওয়ার্ল্ডে আপনাকে সর্বদা ডেটা স্বাভাবিককরণ এবং আপনার টেবিলের কাঠামো সম্পর্কে চিন্তা করতে হবে। সব খনন। স্রেফ আপনার ওয়েব পৃষ্ঠাটি বিন্যাস করুন। তাদের সব আউট। এখন তাদের দেখুন। আপনি ইতিমধ্যে সেখানে 2/3।

আপনি যদি এই ধারণাটি ভুলে যান যে ডাটাবেস আকারের বিষয়গুলি এবং ডেটাটি নকল করা উচিত নয় তবে আপনি সেখানে 3/4 রয়েছেন এবং আপনাকে কোনও কোডও লিখতে হয়নি! আপনার মতামতগুলি আপনার মডেলগুলিকে নির্দেশ দিন। আপনাকে আপনার অবজেক্টগুলি নিতে হবে না এবং সম্পর্কিত বিশ্বের মতো এগুলি 2 ত্রিমাত্রিক করতে হবে না। আপনি এখন আকার দিয়ে বস্তু সংরক্ষণ করতে পারেন।

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


2
আমি "আপনার মতামতগুলি আপনার মডেলগুলিকে নির্দেশ দিন" like বিট. আমার মনে হয় এটি আরডিবিএমএস থেকে আসা একটি হ্যাং-আপ, তবে এটি সবকিছুকে সহজতর করে।
cednarski

23

লোকেরা যখন বাইরে আসে তখন আমি সবসময় ছোটাছুটি করি - এটি সম্পর্কযুক্ত নয়। আমি জ্যাঙ্গোতে সেল্টার লিখেছি এবং নীচে আমার মডেলের একটি স্নিপেট এখানে। আপনি যেমন দেখতে পাবেন, আমার কাছে এমন লিগ রয়েছে যা ব্যবহারকারীরা পরিচালিত বা প্রশিক্ষিত। আমি লীগ থেকে সমস্ত পরিচালকদের পেতে পারি, বা কোনও প্রদত্ত ব্যবহারকারীর কাছ থেকে আমি লীগটি তার কোচ বা পরিচালকদের ফিরিয়ে দিতে পারি।

নির্দিষ্ট কোনও বিদেশী কী সমর্থন নেই বলে কেবল আপনার সম্পর্কের সাথে একটি ডাটাবেস মডেল থাকতে পারে না।

আমার দুই পেন্স।


class League(BaseModel):
    name = db.StringProperty()    
    managers = db.ListProperty(db.Key) #all the users who can view/edit this league
    coaches = db.ListProperty(db.Key) #all the users who are able to view this league

    def get_managers(self):
        # This returns the models themselves, not just the keys that are stored in teams
        return UserPrefs.get(self.managers)

    def get_coaches(self):
        # This returns the models themselves, not just the keys that are stored in teams
        return UserPrefs.get(self.coaches)      

    def __str__(self):
        return self.name

    # Need to delete all the associated games, teams and players
    def delete(self):
        for player in self.leagues_players:
            player.delete()
        for game in self.leagues_games:
            game.delete()
        for team in self.leagues_teams:
            team.delete()            
        super(League, self).delete()

class UserPrefs(db.Model):
    user = db.UserProperty()
    league_ref = db.ReferenceProperty(reference_class=League,
                            collection_name='users') #league the users are managing

    def __str__(self):
        return self.user.nickname

    # many-to-many relationship, a user can coach many leagues, a league can be
    # coached by many users
    @property
    def managing(self):
        return League.gql('WHERE managers = :1', self.key())

    @property
    def coaching(self):
        return League.gql('WHERE coaches = :1', self.key())

    # remove all references to me when I'm deleted
    def delete(self):
        for manager in self.managing:
            manager.managers.remove(self.key())
            manager.put()
        for coach in self.managing:
            coach.coaches.remove(self.key())
            coaches.put()            
        super(UserPrefs, self).delete()    

12

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

আপনি অবশ্যই জেনে থাকতে পারেন যে ডেটাস্টোর স্কেল অব বিল্ড এবং এটি সেই জিনিস যা এটি আরডিএমবিএস থেকে পৃথক করে। বড় ডেটাসেটের সাথে আরও ভাল স্কেল করতে, অ্যাপ ইঞ্জিন কিছু পরিবর্তন করেছে (কিছু মানে প্রচুর পরিবর্তন)।

আরডিবিএমএস ভিএস ডেটাস্টোর
স্ট্রাকচার
ডাটাবেসে আমরা সাধারণত আমাদের ডাটা টেবিল, সারিগুলিতে কাঠামো করি যা ডেটাস্টোরে থাকে এটি হয়ে যায় প্রকার এবং সত্ত্বায় পরিণত হয়


আরডিবিএমএসে সম্পর্ক , বেশিরভাগ লোকেরা ওয়ান-টু ওয়ান, একাধিক-এক-এক, একাধিক-বহু-সম্পর্কের কথা জানায় ডেটাস্টোরে, যেমন এটি "না যোগ দেয়" জিনিস রয়েছে তবুও আমরা " রেফারেন্সপোপার্টি " ব্যবহার করে আমাদের সাধারণীকরণ অর্জন করতে পারি "যেমন এক-এক সম্পর্কের উদাহরণ

ইনডেক্সে
RDMBS মধ্যে সাধারণত আমরা প্রাথমিক কী, পররাষ্ট্র কী, স্বতন্ত্র কী এবং ইনডেক্স কী মত ইনডেক্স অনুসন্ধান গতি বাড়াতে আমাদের ডাটাবেসের কর্মক্ষমতা বৃদ্ধি করা। ডাটাস্টোরে, আপনাকে কমপক্ষে প্রতি সর্বনিম্ন একটি সূচক তৈরি করতে হবে (এটি স্বয়ংক্রিয়ভাবে উত্পন্ন হবে করতে আপনি পছন্দ করেন কিনা তা হবে) কারণ ডেটাস্টোর এই সূচকগুলির ভিত্তিতে আপনার সত্তা অনুসন্ধান করে এবং আমাকে বিশ্বাস করে যে এটিই সেরা অংশ, আরডিবিএমএসে আপনি ব্যবহার করে অনুসন্ধান করতে পারেন নন-ইনডেক্স ক্ষেত্র যদিও এতে কিছুটা সময় লাগবে তবে তা হবে। ডেটাস্টোরে আপনি অন-সূচক সম্পত্তি ব্যবহার করে অনুসন্ধান করতে পারবেন না।


আরডিএমবিএসে গণনা , এটি গণনা করা অনেক সহজ (*) তবে ডেটাস্টোরে, দয়া করে এটিকে স্বাভাবিক উপায়ে ভাবেন না (হ্যাঁ একটি কাউন্ট ফাংশন রয়েছে) এটির 1000 সীমা রয়েছে এবং এটি সত্তার মতোই ছোট ছোট ব্যয় ব্যয় করতে পারে ভাল না তবে আমাদের সর্বদা ভাল পছন্দ রয়েছে, আমরা শারড কাউন্টারগুলি ব্যবহার করতে পারি ।


আরডিএমবিএসে অনন্য সীমাবদ্ধতা , আমরা এই বৈশিষ্ট্যটি এখনই পছন্দ করি? তবে ডেটাস্টোরের নিজস্ব উপায় আছে। আপনি কোনও সম্পত্তি অনন্য হিসাবে সংজ্ঞায়িত করতে পারবেন না :(।

ক্যোয়ারী
Gae Datatore একটি অপেক্ষাকৃত ভালো বৈশিষ্ট্য অনেক উপলব্ধ মত (ওহ না! ডেটাসঞ্চয় নেই মতো কী খুঁজতে হবে) এসকিউএল যা GQL

ডেটা সন্নিবেশ / আপডেট / মুছুন / নির্বাচন করুন
যেখানে আমরা সকলেই আগ্রহী, আরডিএমবিএসের মতো আমাদের আরডিবিএমএসের মতো সন্নিবেশ, আপডেট, মুছুন এবং নির্বাচন করার জন্য একটি জিজ্ঞাসা প্রয়োজন, ডেটাস্টোর ডিলিট করে, মুছুন, পাবেন (খুব উত্তেজিত হবেন না) কারণ ডেটাস্টোর করা বা পদ পেতে লিখবো, পড়বো, ক্ষুদ্র অপারেশনস (পড়ুন ডেটাস্টোর কলের জন্য খরচ ) এবং না না যেখানে ডাটা মডেলিং কর্মের মধ্যে আসে। আপনাকে এই অপারেশনগুলি হ্রাস করতে হবে এবং আপনার অ্যাপটি চালিয়ে যেতে হবে keep রিড অপারেশন হ্রাস করার জন্য আপনি মেমক্যাচ ব্যবহার করতে পারেন ।


6

অবজেক্টিফাই ডকুমেন্টেশন একবার দেখুন। পৃষ্ঠার নীচে প্রথম মন্তব্যটি বলে:

"চমৎকার, যদিও আপনি এটি অবজেক্টিফাই বর্ণনা করার জন্য লিখেছেন, এটি নিজেই অ্যাপেনজিন ডাটাস্টোরের আমি খুব পড়েছি এর একটি অতি সংক্ষিপ্ত ব্যাখ্যা। ধন্যবাদ।"

https://github.com/objectify/objectify/wiki/Concepts


3

আপনি যদি ওআরএম-ম্যাপযুক্ত সত্ত্বাগুলি সম্পর্কে চিন্তা করতে অভ্যস্ত হন তবে মূলত এটি গুগলের অ্যাপ ইঞ্জিনের মতো সত্তা ভিত্তিক ডেটাস্টোর কীভাবে কাজ করে। যোগদানের মতো কোনও কিছুর জন্য, আপনি রেফারেন্স বৈশিষ্ট্যগুলি দেখতে পারেন । ব্যাকএন্ডটি জিকিউএল এবং ডেটাস্টোর এপিআই ইন্টারফেস দ্বারা বিমূর্ত করা হওয়ায় এটি ব্যাকএন্ডের জন্য বিগ টেবিল ব্যবহার করে বা অন্য কোনও কিছুর জন্য আপনাকে সত্যিই উদ্বিগ্ন হওয়ার দরকার নেই।


1
রেফারেন্স বৈশিষ্ট্যগুলির সাথে একটি সমস্যা হ'ল তারা দ্রুত 1+ এন ক্যোয়ারী সমস্যা তৈরি করতে পারে। (১০০ জনকে খুঁজে পেতে 1 টি ক্যোয়ারী টানুন, তারপরে তাদের প্রত্যেককে ব্যক্তি.ড্রেস করার জন্য আরও একটি ক্যোয়ারী তৈরি করুন))
0124816

'রেফারেন্স বৈশিষ্ট্য' এর লিঙ্কটি সম্ভবত জাভা সমর্থন যোগ করে ভাঙা। চেষ্টা করুন: কোড. google.com/appengine/docs/python/datastore/…
স্পাইক0xff

লিঙ্ক স্থির। আপনার / যখন যথেষ্ট পরিমাণে প্রতিনিধি থাকে তবে কোনও উত্তর সম্পাদনা করতে দ্বিধা বোধ করবেন না।
মার্ক সিডেড

0

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

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

এছাড়াও, ডেটাস্টোরের ক্ষেত্রে চিন্তাভাবনার ক্ষেত্রে, আমি মনে করি সঠিক বিবৃতিটি "নোএসকিউএল ডাটাবেসের ক্ষেত্রে বিবেচনা করা" হত। আজকাল তাদের মধ্যে অনেকগুলি পাওয়া যায় তবে যখন গুগল ক্লাউড এসকিউএল (যা মাইএসকিউএল) বাদে গুগল পণ্যগুলির কথা আসে তখন বাকি সমস্ত কিছুই নোএসকিউএল হয়।


-6

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

(বিগ টেবিল রেফারেন্স: http://en.wikedia.org/wiki/BigTable )


প্রশ্নটি বিশেষত গুগল অ্যাপ ইঞ্জিনের সাথে সম্পর্কিত, যা বিগবেট ব্যবহার করে; রিলেশনাল ডাটাবেস ব্যবহার করা কোনও বিকল্প নয়।
নিক জনসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.