গুগল অ্যাপ ইঞ্জিনের সমস্ত ডেটাস্টোর কীভাবে মুছবেন?


122

গুগল অ্যাপ ইঞ্জিনে কীভাবে সমস্ত ডেটাস্টোর মুছতে হয় কেউ জানেন ?


2
db.delete (db.Query (keys_only = true))। এখানে আরও বিশদ স্ট্যাকওভারফ্লো . com/a/10856555/290340
ইভান প্লেস

4
নীচে @ সিস্টেমম্পুনোটআউট দ্বারা চিহ্নিত হিসাবে, GAE এর এখন একটি ডেটাস্টোর অ্যাডমিন রয়েছে যা আপনাকে অন্যান্য জিনিসের মধ্যে কোনও কোডিং ছাড়াই বাল্কে সত্তা মুছতে দেয়। এই বৈশিষ্ট্যটি তৃতীয় মন্তব্যে সমাহিত করার পরিবর্তে এখানে উপস্থাপন করা দরকার।
রালফয়েড

ডেটাস্টোর অ্যাডমিন কাজ করে না (পৃষ্ঠাটি একটি অস্তিত্বহীন হোস্টের জন্য একটি আইফ্রেম লোড করে), সুতরাং আমাদের এখনও db.delete পদ্ধতিটি ব্যবহার করা দরকার।

ডেভলপমেন্ট সার্ভারের সমস্ত ডেটা মুছতে, নীচে /path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/ সিএমডি প্রম্পটে নিম্নলিখিত বিষয়টি ইস্যু করুন: যেখানে মাই্যাপনামটি আপনার অ্যাপ্লিকেশনটির জন্য অ্যাপ্লিকেশন সম্পর্কিত আইমেল নামক ডিরেক্টরি directory
gsinha

উত্তর:


69

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

আপনি যদি ডেটাস্টোর ডেভেলপমেন্টের কথা বলছেন তবে আপনাকে কেবল নিম্নলিখিত ফাইলটি মুছতে হবে: "./WEB-INF/appengine-generated/local_db.bin" । পরের বার আপনি যখন ডেভলপমেন্ট সার্ভারটি চালাবেন তখন ফাইলটি আপনার জন্য আবার তৈরি করা হবে এবং আপনার একটি স্পষ্ট ডিবি হবে।

আপনার প্রকল্পটি পরে পরিষ্কার করার বিষয়টি নিশ্চিত করুন।

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


16
ডেভলপমেন্ট ডেটাস্টোর থেকে মোছার জন্য dev_appserver.py এর একটি -c প্যারামিটার রয়েছে।
স্মিস্ট

1
@ স্প্রিসট কিন্তু এটি কেবল পাইথন অ্যাপ ইঞ্জিনের ক্ষেত্রেই প্রযোজ্য। জাভাতে এটি করার শর্টকাট কীভাবে কেউ জানেন? (এরই মধ্যে, জনআইডলের পরামর্শটি কার্যকরভাবে কাজ করে))
এমজিউকা

2
ধন্যবাদ @ জন: ম্যাক ওএসএক্সের সঠিক পথটি কোথায়?
জর্জ এনগুইন

3
উইন্ডোজের পথ কোথায়?
শেন সেরা

2
@ShaneBest উইন্ডোতে পথ ./target/yourappid-1.0-SNAPSHOT/WEB-INF/appengine-generated/local_db.bin মত কিছু
মর্ফিয়াস

58

নিকের পরামর্শ অনুসারে দূরবর্তী এপিআই পদ্ধতিটি হ'ল সর্বোত্তম পন্থা, তিনি গুগলের অ্যাপ অ্যাপ ইঞ্জিনিয়ার , সুতরাং তাকে বিশ্বাস করুন।

এটি করা এতটা কঠিন নয় এবং সর্বশেষতম 1.2.5 SDK শেল্ফের বাইরে থাকা রিমোট_শেল_পিপি.পি সরবরাহ করে। তাই নতুন এসডিকে ডাউনলোড করতে যান। তারপরে পদক্ষেপগুলি অনুসরণ করুন:

  • আপনার কমান্ডলাইনে রিমোট সার্ভারটি সংযুক্ত করুন: remote_shell_api.py yourapp /remote_api শেলটি আপনার লগইন সম্পর্কিত তথ্য জিজ্ঞাসা করবে এবং অনুমোদিত হলে এটি আপনাকে একটি পাইথন শেল তৈরি করবে। আপনার অ্যাপ.আইএমএলে আপনার কাছে / রিমোট_অ্যাপির জন্য সেটআপ url হ্যান্ডলার প্রয়োজন need

  • আপনি মুছে ফেলতে চান সত্তা আনুন, কোডটি দেখতে এমন কিছু দেখাচ্ছে:

    from models import Entry
    query = Entry.all(keys_only=True)
    entries =query.fetch(1000)
    db.delete(entries)
    \# This could bulk delete 1000 entities a time

আপডেট 2013-10-28 :

  • remote_shell_api.pyদ্বারা প্রতিস্থাপন করা হয়েছে remote_api_shell.py, এবং ডকুমেন্টেশনremote_api_shell.py -s your_app_id.appspot.com অনুযায়ী আপনার সাথে সংযোগ করা উচিত ।

  • ডেটাস্টোর অ্যাডমিন একটি নতুন পরীক্ষামূলক বৈশিষ্ট্য রয়েছে , এটি অ্যাপ্লিকেশন সেটিংসে সক্ষম করার পরে, আপনি ইউআইআই এর মাধ্যমে আপনার ডেটাস্টোরকে ব্যাকআপ করার পাশাপাশি প্রচুর পরিমাণে মুছতে পারবেন।


17
আসলে, আপনার আনার দরকার নেই। কেবল db.delete (এন্ট্রি.ল ()) এটি করবে।
ডাউনলোড করুন

4
আপনাকে এটি 500 টি সত্তা সেটগুলিতে করতে হবে অন্যথায় আপনি পাবেন: BadRequestError: একক কলে 500 টিরও বেশি সত্তা মুছতে পারে না
মার্কসি

1
কেবল একটি এফওয়াইআই, আপনার রিমোট এপিআই ব্যবহার করার জন্য আপনাকে প্রথমে বিল্টিনগুলি ব্যবহার করে আপনার অ্যাপ্লিকেশনটিতে এটি সক্ষম করতে হবে: - রিমোট_এপিআই: আপনার ওয়াইএমএল ফাইলে। আরও তথ্যটি বিকাশকারীগুলিতে রয়েছে
অ্যাপেনজিন

2
আপনি এন্ট্রি.লকে () কল দিলে অন্তত 'কী_নিলি = সত্য' যুক্ত করুন। আপনার যদি ডেটা পরীক্ষা করার প্রয়োজন না হয় তবে পুরো এন্ট্রিটি আনার দরকার নেই। অন্যথায় আপনি কেবল কম্পিউটিং চক্র নষ্ট করছেন।
ইভান প্লেস

1
+1 ... তবে: ২০১৩ সালের হিসাবে, রিমোট_শেল_পিপি.পি বিদ্যমান নেই। বর্তমান স্ক্রিপ্টের নাম রিমোট_পি_সেল.পি। এছাড়াও, আপনি যদি এনডিবি ব্যবহার করেন (যা এই দিনগুলিতে বেশিরভাগ লোকেরা করেন) তবে এনডিবি.ডিলেট_মুলটি (মডেল.এন্ট্রি.কোয়ারি ()। আনুন (কীগুলি_ইনালি = সত্য))
উরি

27

হাতল বাল্ক ডেটাস্টোর উপর মুছে ফেলতে দ্রুততম এবং কার্যকর উপায় নতুন ব্যবহার করা ম্যাপার এপিআই সর্বশেষ ঘোষণা গুগল ইনপুট / আউটপুট

যদি আপনার পছন্দের ভাষা পাইথন হয় তবে আপনাকে কেবল ম্যাপ্রেডস.আইএমএল ফাইলে আপনার ম্যাপারটি রেজিস্ট্রেশন করতে হবে এবং এই জাতীয় ফাংশনটি সংজ্ঞায়িত করতে হবে:

from mapreduce import operation as op
def process(entity):
 yield op.db.Delete(entity)

উপর জাভা আপনাকে একটি চেহারা আছে উচিত এই নিবন্ধটি ভালো একটি ফাংশন প্রস্তাব দেওয়া যে:

@Override
public void map(Key key, Entity value, Context context) {
    log.info("Adding key to deletion pool: " + key);
    DatastoreMutationPool mutationPool = this.getAppEngineContext(context)
            .getMutationPool();
    mutationPool.delete(value.getKey());
}

সম্পাদনা:
এসডিকে ১.৩.৮ থেকে একটি ডেটাস্টোর অ্যাডমিন বৈশিষ্ট্য রয়েছে এই উদ্দেশ্যে


27

আপনি সার্ভার চালানোর সময় আপনি ডেভলপমেন্ট সার্ভার ডেটাস্টোর সাফ করতে পারেন :

/path/to/dev_appserver.py --clear_datastore=yes myapp

এছাড়াও আপনি সংক্ষিপ্ত করতে পারেন --clear_datastoreসঙ্গে -c


5
এটি কোনও সাম্প্রতিক বিষয় কিনা তা নিশ্চিত নয় তবে আসল বাক্য গঠন এখন /path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/('হ্যাঁ নোট করুন')
মেল্ল্বর

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

গুগল ক্লাউড এসডিকে "--clear_datastore = হ্যাঁ" এর 270.0.0 সংস্করণে এখনও সমান চিহ্ন নিয়ে কাজ করে
ফ্রেঙ্কস্যান্ড

15

আপনার যদি উল্লেখযোগ্য পরিমাণে ডেটা থাকে তবে এটি মুছতে আপনার কোনও স্ক্রিপ্ট ব্যবহার করা দরকার। যদিও ক্লায়েন্টের পক্ষ থেকে ডেটাস্টোর সাফ করার জন্য আপনি রিমোট_এপি ব্যবহার করতে পারেন যদিও সোজা manner


11

আপনি এখানে যান: ডেটাস্টোর অ্যাডমিনে যান, এবং তারপরে আপনি মুছে ফেলতে চান এমন সত্তা নির্বাচন করুন এবং মুছুন ক্লিক করুন। ম্যাপ্রেডুস মুছে ফেলার যত্ন নেবে!


9

অ্যাপ ইঞ্জিনের ডেটাস্টোর থেকে এন্ট্রিগুলি সরাতে আপনি বিভিন্ন উপায় ব্যবহার করতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

  1. প্রথমে ভাবুন আপনার সত্যিকারের এন্ট্রিগুলি সরিয়ে নেওয়া দরকার কিনা। এটি ব্যয়বহুল এবং এগুলি সরাতে না পারা সস্তা।

  2. আপনি ডেটাস্টোর অ্যাডমিন ব্যবহার করে হাত দ্বারা সমস্ত এন্ট্রি মুছতে পারেন।

  3. আপনি রিমোট এপিআই ব্যবহার করতে পারেন এবং ইন্টারেক্টিভভাবে এন্ট্রিগুলি সরাতে পারেন।

  4. আপনি কোডের কয়েকটি লাইন ব্যবহার করে প্রোগ্রামগুলি এন্ট্রিগুলি সরিয়ে ফেলতে পারেন।

  5. আপনি এগুলি টাস্ক কুইউস এবং কার্সার ব্যবহার করে বাল্কে মুছে ফেলতে পারেন।

  6. অথবা আপনি আরও শক্তিশালী এবং ফ্যানসিয়ার পেতে ম্যাপ্রেডুস ব্যবহার করতে পারেন।

এই পদ্ধতি প্রতিটি নিম্নলিখিত ব্লগ পোস্টে ব্যাখ্যা করা হয়: http://www.shiftedup.com/2015/03/28/how-to-bulk-delete-entries-in-app-engine-datastore

আশা করি এটা সাহায্য করবে!


6

এটি করার শূন্য-সেটআপ উপায়টি হল আপনার চালিত অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে, অ্যাডমিন সার্ভিসে একটি এক্সিকিউটিভ-সালট্রি-কোড এইচটিটিপি অনুরোধ প্রেরণ করা:

import urllib
import urllib2

urllib2.urlopen('http://localhost:8080/_ah/admin/interactive/execute',
    data = urllib.urlencode({'code' : 'from google.appengine.ext import db\n' +
                                      'db.delete(db.Query())'}))

এটি কেবল ডেভলপমেন্ট সার্ভারের জন্য কাজ করে। একটি উত্পাদন সমতুল্য আছে?
গ্যাডি

3

উৎস

আমি এটি থেকে পেয়েছি http://code.google.com/appengine/articles/remote_api.html

ইন্টারেক্টিভ কনসোল তৈরি করুন

প্রথমত, আপনাকে একটি ইন্টারেক্টিভ অ্যাপেনজিনেজ কনসোল সংজ্ঞায়িত করতে হবে। সুতরাং, অ্যাপেনজিন_কনসোল.পি নামে একটি ফাইল তৈরি করুন এবং এটি প্রবেশ করুন:

#!/usr/bin/python
import code
import getpass
import sys

# These are for my OSX installation. Change it to match your google_appengine paths. sys.path.append("/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine")
sys.path.append("/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/yaml/lib")

from google.appengine.ext.remote_api import remote_api_stub
from google.appengine.ext import db

def auth_func():
  return raw_input('Username:'), getpass.getpass('Password:')

if len(sys.argv) < 2:
  print "Usage: %s app_id [host]" % (sys.argv[0],)
app_id = sys.argv[1]
if len(sys.argv) > 2:
  host = sys.argv[2]
else:
  host = '%s.appspot.com' % app_id

remote_api_stub.ConfigureRemoteDatastore(app_id, '/remote_api', auth_func, host)

code.interact('App Engine interactive console for %s' % (app_id,), None, locals())



ম্যাপার বেস ক্লাস তৈরি করুন

একবার এটি স্থানে থাকলে এই ম্যাপার ক্লাসটি তৈরি করুন। আমি স্রেফ ইউটি.এসপি নামে একটি নতুন ফাইল তৈরি করেছি এবং এটি ছুঁড়েছি:

class Mapper(object):
  # Subclasses should replace this with a model class (eg, model.Person).
  KIND = None

  # Subclasses can replace this with a list of (property, value) tuples to filter by.
  FILTERS = []

  def map(self, entity):
    """Updates a single entity.

    Implementers should return a tuple containing two iterables (to_update, to_delete).
    """
    return ([], [])

  def get_query(self):
    """Returns a query over the specified kind, with any appropriate filters applied."""
    q = self.KIND.all()
    for prop, value in self.FILTERS:
      q.filter("%s =" % prop, value)
    q.order("__key__")
    return q

  def run(self, batch_size=100):
    """Executes the map procedure over all matching entities."""
    q = self.get_query()
    entities = q.fetch(batch_size)
    while entities:
      to_put = []
      to_delete = []
      for entity in entities:
        map_updates, map_deletes = self.map(entity)
        to_put.extend(map_updates)
        to_delete.extend(map_deletes)
      if to_put:
        db.put(to_put)
      if to_delete:
        db.delete(to_delete)
      q = self.get_query()
      q.filter("__key__ >", entities[-1].key())
      entities = q.fetch(batch_size)

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

এটি দিয়ে চালান!

এখন, আপনার অ্যাপেনজিন ইন্টারেক্টিভ কনসোলটি শুরু করুন:

$python appengine_console.py <app_id_here>

এটি ইন্টারেক্টিভ কনসোলটি শুরু করা উচিত। এতে মডেলের একটি সাবক্লাস তৈরি করুন:

from utils import Mapper
# import your model class here 
class MyModelDeleter(Mapper):
    KIND = <model_name_here>

    def map(self, entity):
        return ([], [entity])

এবং, অবশেষে, এটি চালান (আপনার কাছ থেকে ইন্টারেক্টিভ কনসোল থেকে): ম্যাপার = মাইমোডেলডেলিটার () ম্যাপার.আরুন ()

এটাই!


3

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


3

আমি একটি অ্যাড-ইন প্যানেল তৈরি করেছি যা আপনার মোতায়েন হওয়া অ্যাপ ইঞ্জিন অ্যাপ্লিকেশনগুলির সাথে ব্যবহার করা যেতে পারে। এটি একটি ড্রপডাউনে ডেটাস্টোরের মধ্যে উপস্থিত ধরণের তালিকাবদ্ধ করে এবং আপনি "কার্য" নির্ধারণের জন্য একটি বোতামটি ক্লিক করতে পারেন যা নির্দিষ্ট ধরণের সমস্ত কিছু সরিয়ে দেয় বা কেবল সমস্ত কিছু মুছে দেয়। আপনি এটি এখানে ডাউনলোড করতে পারেন:
http://code.google.com/p/jobfeed/wiki/Nuke


3

পাইথনের জন্য, 1.3.8 এর জন্য অন্তর্নির্মিত একটি পরীক্ষামূলক অ্যাডমিন অন্তর্ভুক্ত রয়েছে। তারা বলে : "আপনার অ্যাপে আইএমএল ফাইলটিতে নিম্নলিখিত বিল্টিনটি সক্ষম করুন:"

builtins:
- datastore_admin: on

"ডেটাস্টোর মুছুন বর্তমানে কেবল পাইথন রানটাইম সহ উপলভ্য Java একটি আসন্ন প্রকাশে। "


অ্যাপ্লিকেশনটিতে কনফিগারেশন যুক্ত করা হয়েছে yam পরিবর্তে আমরা এটিকে 'প্রশাসন' বিভাগের 'অ্যাপ্লিকেশনস সেটিং' পৃষ্ঠা থেকে সক্ষম করতে পারি। এটি সক্ষম করার জন্য একটি বোতাম আছে
সন্দীপ

3

আপনার অ্যাপ্লিকেশনটির জন্য "ডেটাস্টোর অ্যাডমিন" খুলুন এবং প্রশাসক সক্ষম করুন। তারপরে আপনার সমস্ত সত্ত্বা চেক বাক্সের সাথে তালিকাভুক্ত হবে। আপনি কেবল অযাচিত এনটাইটেলগুলি নির্বাচন করতে এবং সেগুলি মুছতে পারেন।


3

এটি আপনি যা খুঁজছেন ...

db.delete(Entry.all(keys_only=True))

কেবল-কি-কি ক্যোয়ারী চালানো পুরো আনার চেয়ে দ্রুত এবং আপনার কোটাটি আরও ছোট হবে কারণ কেবল-কীগুলিই কেবল ছোট ছোট বিকল্প হিসাবে বিবেচিত হয়।

নিক জন জনসনের এটির আরও বর্ণনা দিয়ে দেওয়া একটি উত্তরের লিঙ্ক এখানে ।

নীচে একটি টেবিল কাটাতে একটি শেষ থেকে শেষ REST এপিআই সমাধান ...

আমি ডাটাবেস লেনদেন পরিচালনা করতে একটি REST এআইপি সেটআপ করি যেখানে যথাযথ মডেল / ক্রিয়াতে সরাসরি রুট ম্যাপ করা হয়। ডান url (উদাহরণ.com/inventory/truncate) প্রবেশ করে এবং লগ ইন করে এটিকে বলা যেতে পারে।

এখানে রুট:

Route('/inventory/truncate', DataHandler, defaults={'_model':'Inventory', '_action':'truncate'})

হ্যান্ডলারটি এখানে:

class DataHandler(webapp2.RequestHandler):
  @basic_auth
  def delete(self, **defaults):
    model = defaults.get('_model')
    action = defaults.get('_action')
    module = __import__('api.models', fromlist=[model])
    model_instance = getattr(module, model)()
    result = getattr(model_instance, action)()

এটি গতিশীলভাবে মডেলটি লোড করে শুরু হয় (যেমন api.models এর অধীনে ইনভেন্টরি পাওয়া যায়), তারপরে অ্যাকশন প্যারামিটারে উল্লিখিত সঠিক পদ্ধতিটিকে (Inventory.truncate ()) কল করে।

@Basic_auth হ'ল একটি সাজসজ্জা / মোড়ক যা সংবেদনশীল ক্রিয়াকলাপগুলির জন্য প্রমাণীকরণ সরবরাহ করে (যেমন POST / DELETE)। এখানে একটি ওআউথ ডেকোরেটরও রয়েছেআপনি সুরক্ষার বিষয়ে উদ্বিগ্ন থাকলে উপলব্ধ রয়েছে।

অবশেষে, ক্রিয়াটি বলা হয়:

def truncate(self):
  db.delete(Inventory.all(keys_only=True))

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


3

আপনি সমস্ত একের পর এক মুছে ফেলে সমস্ত ডেটাস্টোর মুছতে পারেন। গুগল অ্যাপেনজিন ড্যাশ বোর্ড সহ। দয়া করে এই পদক্ষেপগুলি অনুসরণ করুন।

  1. Https://console.cloud.google.com/datastore/settings এ লগইন করুন
  2. ওপেন ডেটাস্টোর অ্যাডমিন ক্লিক করুন । (সক্ষম না হলে এটি সক্ষম করুন))
  3. সমস্ত সত্ত্বা নির্বাচন করুন এবং মুছুন টিপুন (

আরও তথ্যের জন্য এই চিত্রটি দেখুন http://stores.googleapis.com/bnifsc/Screenshot%20from%202015-01-31%2023%3A58%3A41.png


2

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


2

বিকাশ সার্ভারের জন্য, গুগল অ্যাপ ইঞ্জিন লঞ্চারের মাধ্যমে সার্ভার চালনার পরিবর্তে আপনি এটিকে টার্মিনাল থেকে চালাতে পারেন:

dev_appserver.py --port = [পোর্টবার্বার] - ক্লিয়ার_ড্যাটাস্টোর = হ্যাঁ [নামফলক]

উদাহরণস্বরূপ: আমার অ্যাপ্লিকেশন "রিডার" পোর্ট 15080 এ চলেছে the কোডটি পরিবর্তন করে সার্ভারটি পুনরায় চালু করার পরে আমি কেবল "dev_appserver.py --port = 15080 --clear_datastore = Yes পাঠক" চালাচ্ছি।

এটা আমার জন্য ভাল.


2

সাম্প্রতিক ঘটনাবলী সম্পর্কে উত্তর যুক্ত করা হচ্ছে।

গুগল সম্প্রতি ডেটাস্টোর অ্যাডমিন বৈশিষ্ট্য যুক্ত করেছে। আপনি এই কনসোলটি ব্যবহার করে আপনার সত্তাগুলি ব্যাকআপ, মুছতে বা অনুলিপি করতে পারবেন।

https://developers.google.com/appengine/docs/adminconsole/datastoreadmin#Deleting_Entities_in_Bulk


1

আমি প্রায়শই সমস্ত ডেটা স্টোর মুছতে চাই না তাই আমি সোর্স নিয়ন্ত্রণের বাইরে /war/WEB-INF/local_db.bin এর একটি পরিষ্কার কপি টান। এটি কেবল আমারই হতে পারে তবে দেব মোড বন্ধ হয়ে যাওয়ার পরেও মনে হচ্ছে ফাইলটি টানার আগে আমাকে শারীরিকভাবে সরিয়ে ফেলতে হবে। এটি উইন্ডোজে ইক্লিপসের জন্য সাবভার্শন প্লাগইন ব্যবহার করে।


0

পিএইচপি বিভিন্নতা:

import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.DatastoreServiceFactory;

define('DATASTORE_SERVICE', DatastoreServiceFactory::getDatastoreService());

function get_all($kind) {
    $query = new Query($kind);
    $prepared = DATASTORE_SERVICE->prepare($query);
    return $prepared->asIterable();
}

function delete_all($kind, $amount = 0) {
    if ($entities = get_all($kind)) {
        $r = $t = 0;
        $delete = array();
        foreach ($entities as $entity) {
            if ($r < 500) {
                $delete[] = $entity->getKey();
            } else {
                DATASTORE_SERVICE->delete($delete);
                $delete = array();
                $r = -1;
            }
            $r++; $t++;
            if ($amount && $amount < $t) break;
        }
        if ($delete) {
            DATASTORE_SERVICE->delete($delete);
        }
    }
}

হ্যাঁ এতে সময় এবং 30 সেকেন্ড লাগবে। একটি সীমা। আমি 30 সেকেন্ডের বাইরে স্বয়ংক্রিয় করতে একটি এজাক্স অ্যাপ্লিকেশন নমুনা রাখার কথা ভাবছি।


এটি এমনকি বৈধ php নয়। import? একটি ধ্রুবক একটি অবজেক্ট উদাহরণ হিসাবে সংজ্ঞায়িত?
জোশ জে


0

আপনি যদি এনডিবি ব্যবহার করেন তবে ডেটাস্টোর সাফ করার জন্য যে পদ্ধতিটি আমার পক্ষে কাজ করেছিল:

ndb.delete_multi(ndb.Query(default_options=ndb.QueryOptions(keys_only=True)))

1
আমি মনে করি না এটি কাজ করবে। অ্যাপেনজিনের অভিযোগ সম্পর্কে এ্যাপেনজিনের Sorry, unexpected error: The kind "__Stat_Kind__" is reserved.মনে হচ্ছে কিছু অভ্যন্তরীণ পরিসংখ্যান সত্তা রয়েছে যা এই পদ্ধতিটি দ্বারা প্রকাশ করা যেতে পারে (তাদের শেষের দিকে সম্ভাব্য বাগ?)
নিখোঁজ

0

স্থানীয় পরিবর্তে অ্যাপ ইঞ্জিনে থাকা কোনও ডেটাস্টোরের জন্য, আপনি নতুন ডেটাস্টোর এপিআই ব্যবহার করতে পারেন । কীভাবে শুরু করবেন তার জন্য এখানে একটি প্রাইমারি রয়েছে

আমি একটি স্ক্রিপ্ট লিখেছিলাম যা সমস্ত অন্তর্নির্মিত সত্তা মুছে দেয় tes এপিআই খুব দ্রুত পরিবর্তন হচ্ছে, তাই রেফারেন্সের জন্য, আমি এটি প্রতিশ্রুতি 990ab5c7f2063e8147bcc56ee222836fd3d6e15b এ ক্লোন করেছি

from gcloud import datastore
from gcloud.datastore import SCOPE
from gcloud.datastore.connection import Connection
from gcloud.datastore import query

from oauth2client import client

def get_connection():
  client_email = 'XXXXXXXX@developer.gserviceaccount.com'
  private_key_string = open('/path/to/yourfile.p12', 'rb').read()

  svc_account_credentials = client.SignedJwtAssertionCredentials(
    service_account_name=client_email,
    private_key=private_key_string,
    scope=SCOPE)

  return Connection(credentials=svc_account_credentials)


def connect_to_dataset(dataset_id):
  connection = get_connection()
  datastore.set_default_connection(connection)
  datastore.set_default_dataset_id(dataset_id)

if __name__ == "__main__":
  connect_to_dataset(DATASET_NAME)
  gae_entity_query = query.Query()
  gae_entity_query.keys_only()
  for entity in gae_entity_query.fetch():
    if entity.kind[0] != '_':
      print entity.kind
      entity.key.delete()

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

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

  • সময় শেষ হলে পরবর্তী চেষ্টা চালিয়ে যাওয়ার সম্ভাবনা সহ জিএই ব্যর্থ (কমপক্ষে স্থানীয়ভাবে কাজ করে) ছাড়াই রেকর্ডের বড় সেটগুলি দিয়ে কোয়েরি দিয়ে মুছে ফেলা সম্ভব:


    qdelete.getFetchPlan().setFetchSize(100);

    while (true)
    {
        long result = qdelete.deletePersistentAll(candidates);
        LOG.log(Level.INFO, String.format("deleted: %d", result));
        if (result <= 0)
            break;
    }
  • এছাড়াও কখনও কখনও প্রার্থীদের (সম্পর্কিত রেকর্ডগুলি) আলাদা টেবিলে রাখার পরিবর্তে প্রাথমিক সারণীতে অতিরিক্ত ক্ষেত্র তৈরি করা দরকারী। এবং হ্যাঁ, ক্ষেত্রটি সামান্য গণনার ব্যয়ের সাথে আনইনডেক্স / সিরিয়ালযুক্ত অ্যারে হতে পারে।

0

সমস্ত সার্ভারের জন্য যাদের ডেভ সার্ভারের জন্য দ্রুত সমাধানের প্রয়োজন (ফেব্রুয়ারী 2016-এ লেখার সময় হিসাবে):

  1. ডেভ সার্ভারটি বন্ধ করুন।
  2. লক্ষ্য মুছুন ডিরেক্টরি ।
  3. প্রকল্পটি পুনর্নির্মাণ করুন।

এটি ডেটাস্টোর থেকে সমস্ত ডেটা মুছবে।


0

লাইভ ডেটাস্টোরের সমস্ত ডেটা মুছে ফেলার জন্য বিদ্যমান সমাধানগুলি সম্পর্কে আমি হতাশ হয়ে পড়েছিলাম পড়েছিলাম যে আমি একটি ছোট জিএই অ্যাপ্লিকেশন তৈরি করেছি যা এর 30 সেকেন্ডের মধ্যে বেশ কিছু পরিমাণে ডেটা মুছতে পারে।

কীভাবে ইনস্টল করবেন: https://github.com/xamde/xydra


0

জাভা জন্য

DatastoreService db = DatastoreServiceFactory.getDatastoreService();
List<Key> keys = new ArrayList<Key>();
for(Entity e : db.prepare(new Query().setKeysOnly()).asIterable())
    keys.add(e.getKey());
db.delete(keys);

ডেভলপমেন্ট সার্ভারে ভাল কাজ করে


0

আপনার কাছে দুটি সহজ উপায় আছে,

# 1: খরচ বাঁচাতে, পুরো প্রকল্পটি মুছুন

# 2: টিএস-ডেটাস্টোর-ওআরএম ব্যবহার করে:

https://www.npmjs.com/package/ts-datastore-orm Entity.truncate () এর অপেক্ষায়; কাণ্ডটি প্রতি সেকেন্ডে প্রায় 1K সারি মুছে ফেলতে পারে

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