Google App Engine के सभी डेटास्टोर को कैसे हटाएं?


122

क्या कोई जानता है कि Google App Engine के सभी डेटास्टोर को कैसे हटाया जाए ?


2
db.delete (db.Query (keys_only = सच))। अधिक जानकारी यहां stackoverflow.com/a/10856555/290340
इवान प्लाइस

4
जैसा कि नीचे @systempuntoout द्वारा बताया गया है, GAE के पास अब एक डेटास्टोर व्यवस्थापक है जो आपको अन्य चीजों के अलावा किसी भी कोडिंग के बिना बल्क में संस्थाओं को हटाने की सुविधा देता है। उस सुविधा को तीसरी टिप्पणी में दफन किए जाने के बजाय यहां प्रकट होने की आवश्यकता है।
ralfoide

डेटास्टोर व्यवस्थापक काम नहीं करता है (पृष्ठ एक गैर-मौजूद होस्ट के लिए एक iframe लोड करता है), इसलिए हमें अभी भी db.delete विधि का उपयोग करने की आवश्यकता होगी।

डेवलपमेंट सर्वर के सभी डेटा को हटाने के लिए, cmd प्रॉम्प्ट पर निम्नलिखित को जारी करें: /path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/ जहाँ myappname आपकी डायरेक्टरी है जिसमें ऐप के लिए आपकी फ़ाइल है। आपको इस डाइरेक्टरी पथ पर cd करने की आवश्यकता है।
gsinha

जवाबों:


69

यदि आप लाइव डेटास्टोर के बारे में बात कर रहे हैं , तो अपने ऐप के लिए डैशबोर्ड खोलें (एपेंजिन पर लॉगिन करें) फिर डेटास्टोर -> डेटाव्यूअर, उस तालिका के लिए सभी पंक्तियों का चयन करें जिसे आप हटाना चाहते हैं और डिलीट बटन दबाएं (आपको करना होगा) अपनी सभी तालिकाओं के लिए ऐसा करें)। आप रिमोट_पाइ के माध्यम से एक ही प्रोग्रामेटिक रूप से कर सकते हैं (लेकिन मैंने इसका कभी उपयोग नहीं किया)।

यदि आप विकास डेटास्टोर के बारे में बात कर रहे हैं , तो आपको बस निम्नलिखित फ़ाइल को हटाना होगा: "./WEB-INF/appengine-generated/local_db.bin" । अगली बार जब आप विकास सर्वर चलाते हैं, तो फ़ाइल आपके लिए जनरेट हो जाएगी और आपके पास एक स्पष्ट db होगा।

अपने प्रोजेक्ट को बाद में साफ करना सुनिश्चित करें।

यह उन थोड़े से गोचरों में से एक है जो Google अनुप्रयोग इंजन के साथ खेलना शुरू करने पर काम में आते हैं। आप अपने आप को ऑब्जेक्ट्स को डेटास्टोर में रख पाएंगे और फिर अप्रचलित डेटा के साथ समाप्त होने वाली अपनी स्थायी संस्थाओं के लिए JDO ऑब्जेक्ट मॉडल को बदल देंगे जो आपके ऐप को सभी जगह दुर्घटनाग्रस्त कर देगा।


16
विकास डेटास्टोर से हटाने के लिए dev -appserver.py में -c पैरामीटर है।
सविस्तार

1
@svrist लेकिन यह केवल पायथन ऐप इंजन पर लागू होता है। किसी को पता है कि कैसे जावा में यह करने के लिए एक शॉर्टकट? (इस बीच, जॉनइडॉल का सुझाव अच्छी तरह से काम करता है।)
मागुका

2
धन्यवाद @ जॉन: मैक ओएसएक्स में सटीक मार्ग कहां है?
जॉर्ज गुयेन

3
विंडोज में रास्ता कहाँ है?
शेन बेस्ट

2
@ShaneBest खिड़कियों में पथ ./target/yourappid-1.0-SNAPSHOT/WEB-INF/appengine-generated/local_db.bin की तरह कुछ है
मॉर्फियस

58

निक द्वारा सुझाए गए अनुसार दूरस्थ एपीआई विधि सबसे अच्छा तरीका है, वह Google का एक ऐप इंजन इंजीनियर है , इसलिए उस पर भरोसा करें।

ऐसा करना मुश्किल नहीं है, और नवीनतम 1.2.5 एसडीके रिमोट_शेल_पिएरो को शेल्फ से बाहर प्रदान करता है। इसलिए नया एसडीके डाउनलोड करें। फिर चरणों का पालन करें:

  • अपने कमांडलाइन में रिमोट सर्वर कनेक्ट करें: remote_shell_api.py yourapp /remote_api शेल आपकी लॉगिन जानकारी के लिए पूछेगा, और यदि अधिकृत है, तो आपके लिए एक पायथन शेल बना देगा। आपको अपने app.yaml में / Remote_api के लिए सेटअप url हैंडलर की आवश्यकता है

  • जिन संस्थाओं को आप हटाना चाहते हैं, उन्हें कोड कुछ इस तरह दिखता है:

    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 (Entry.all ()) करेगा।
डाउनलोड करें

4
आप 500 इकाई सेट में ऐसा करने की जरूरत नहीं तो आप प्राप्त करेंगे: BadRequestError: एक कॉल की तुलना में अधिक 500 संस्थाओं को नहीं हटा सकते
marcc

1
बस एक FYI करें, आपके द्वारा दूरस्थ एपीआई का उपयोग करने के लिए आपको इसे अपने एप्लिकेशन में पहले बिलिन का उपयोग करके सक्षम करना होगा: - Remote_api: आपकी YAML फ़ाइल में। अधिक जानकारी पर है developers.google.com/appengine/articles/remote_api
ZAFFIRO

2
जब आप Entry.all () कहते हैं तो कम से कम 'keys_only = True' जोड़ें। यदि आपको डेटा की जाँच करने की आवश्यकता नहीं है, तो पूरी प्रविष्टि लाने की कोई आवश्यकता नहीं है। और आप सिर्फ कंप्यूटिंग चक्र बर्बाद कर रहे हैं।
इवान प्लाइस

1
+1 ... लेकिन: 2013 तक, Remote_shell_api.py मौजूद नहीं है। वर्तमान स्क्रिप्ट नाम Remote_api_shell.py है। इसके अलावा, यदि आप ndb (जो कि ज्यादातर लोग इन दिनों करते हैं) का उपयोग करते हैं, तो ndb.delete_multi (model.Entry.query ()। Fetch (keys_only = True)) का उपयोग करने के लिए अनुशंसित तरीका
Uri

27

डेटास्टोर पर बल्क डिलीट को संभालने का सबसे तेज़ और कुशल तरीका नवीनतम Google I / O पर घोषित नए मैपर एपीआई का उपयोग करना है ।

यदि आपकी पसंद की भाषा पायथन है , तो आपको बस अपने मैपर को एक मैप्रेडिक.माइल फाइल में रजिस्टर करना होगा और एक फ़ंक्शन को इस तरह परिभाषित करना होगा:

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());
}

संपादित करें:
एसडीके 1.3.8 के बाद से, इस उद्देश्य के लिए एक डाटस्टोर प्रशासन सुविधा है


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 में जगह है, और gcloud CLI के माध्यम से स्थापित dev_appserver के लिए काम करता है
माइकल

Google मेघ एसडीके "--clear_datastore = हाँ" का संस्करण 270.0.0 में अभी भी बराबर के चिह्न के साथ काम करता
franksands

15

यदि आपके पास महत्वपूर्ण मात्रा में डेटा है, तो आपको इसे हटाने के लिए स्क्रिप्ट का उपयोग करने की आवश्यकता है। हालाँकि, आप ग्राहक की ओर से डेटास्टोर को स्पष्ट रूप से साफ़ करने के लिए Remote_api का उपयोग कर सकते हैं, हालाँकि।


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

ऐसा करने के लिए शून्य-सेटअप तरीका व्यवस्थापक सेवा के लिए एक निष्पादित-मनमाना-कोड HTTP अनुरोध भेजने के लिए है जो आपके पहले से ही चल रहे ऐप में स्वचालित रूप से है:

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

इंटरएक्टिव कंसोल बनाएं

सबसे पहले, आपको एक इंटरैक्टिव एपेंनगिंग कंसोल को परिभाषित करने की आवश्यकता है। तो, appengine_console.py नामक एक फ़ाइल बनाएं और इसे दर्ज करें:

#!/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())



मैपर आधार वर्ग बनाएँ

एक बार जब यह जगह हो जाए, तो यह मैपर क्लास बनाएं। मैंने अभी एक नया फ़ाइल बनाया है, जिसे utils.py कहा जाता है और इसे फेंक दिया है:

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])

और, अंत में, इसे चलाएं (आप इंटरेक्टिव कंसोल से): मैपर = MyModelDeleter () mapper.run ()

बस!


3

आप इसे वेब इंटरफ़ेस का उपयोग करके कर सकते हैं। अपने खाते में प्रवेश करें, बाएं हाथ की ओर लिंक के साथ नेविगेट करें। डेटा स्टोर प्रबंधन में आपके पास डेटा को संशोधित करने और हटाने के लिए विकल्प हैं। संबंधित विकल्पों का उपयोग करें।


3

मैंने एक ऐड-इन पैनल बनाया है जिसका उपयोग आपके तैनात ऐप इंजन ऐप्स के साथ किया जा सकता है। यह एक ड्रॉपडाउन में डेटस्टॉर में मौजूद प्रकारों को सूचीबद्ध करता है, और आप "कार्यों" को शेड्यूल करने के लिए एक बटन पर क्लिक कर सकते हैं जो एक विशिष्ट प्रकार की सभी संस्थाओं या बस सब कुछ को हटा देते हैं। आप इसे यहाँ डाउनलोड कर सकते हैं:
http://code.google.com/p/jobfeed/wiki/Nuke


3

पाइथन के लिए, 1.3.8 में इसके लिए एक प्रायोगिक व्यवस्थापक अंतर्निहित है। वे कहते हैं : "अपने एप्लिकेशन में निम्न बिल्टइन को सक्षम करें। श्याम फाइल:"

builtins:
- datastore_admin: on

"डेटास्टोर हटाएं वर्तमान में केवल पायथन रनटाइम के साथ उपलब्ध है। जावा एप्लिकेशन, हालांकि, अभी भी इस सुविधा का लाभ एक गैर-डिफ़ॉल्ट पायथन एप्लिकेशन संस्करण बनाकर ले सकते हैं, जो ऐप में डीटस्टोर व्यवस्थापक को सक्षम करता है। श्याम। जावा के लिए मूल समर्थन शामिल किया जाएगा। एक आगामी रिलीज में। "


App.yaml में कॉन्फ़िगरेशन जोड़ना एक त्रुटि फेंक दिया। इसके बजाय हम इसे 'व्यवस्थापन' अनुभाग में 'एप्लिकेशन सेटिंग' पृष्ठ से सक्षम कर सकते हैं। इसे सक्षम करने के लिए एक बटन है
Sundeep

3

अपने आवेदन के लिए "डेटास्टोर व्यवस्थापक" खोलें और व्यवस्थापक को सक्षम करें। फिर आपकी सभी इकाइयां चेक बॉक्स के साथ सूचीबद्ध होंगी। आप बस अवांछित एंटाइट्स का चयन कर सकते हैं और उन्हें हटा सकते हैं।


3

यह वह है जो आप खोज रहे हैं ...

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

की-ओनली क्वेरी रन करना पूर्ण फ़ेच की तुलना में बहुत तेज़ है, और आपका कोटा छोटा हिट लेगा, क्योंकि की-ही क्वेरीज़ को छोटा ऑप्स माना जाता है।

यहां पर निक जॉनसन के एक उत्तर की एक कड़ी आगे वर्णित है।

नीचे एक टेबल को छोटा करने के लिए एंड-टू-एंड REST API सॉल्यूशन है ...

मैंने डेटाबेस लेनदेन को संभालने के लिए एक REST API की स्थापना की जहाँ मार्गों को उचित मॉडल / क्रिया के माध्यम से सीधे मैप किया जाता है। इसे राइट url (example.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) के लिए प्रमाणीकरण प्रदान करता है। यदि आप सुरक्षा के बारे में चिंतित हैं तो एक oAuth डेकोरेटर भी उपलब्ध है।

अंत में, कार्रवाई कहा जाता है:

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

यह जादू जैसा दिखता है लेकिन यह वास्तव में बहुत सीधा है। सबसे अच्छा हिस्सा है, मॉडल में एक और कार्रवाई जोड़कर एक-या-कई परिणामों को हटाने के लिए डिलीट () का फिर से उपयोग किया जा सकता है।


3

आप सभी प्रकार के एक-एक करके सभी डेटास्टोर को हटा सकते हैं। गूगल appengine डैश बोर्ड के साथ। कृपया इन चरणों का पालन करें।

  1. Https://console.cloud.google.com/datastore/settings पर लॉग इन करें
  2. Open Datastore व्यवस्थापक पर क्लिक करें । (सक्षम न होने पर इसे सक्षम करें।)
  3. सभी एंटिटीज़ का चयन करें और डिलीट प्रेस करें। (यह चरण सभी चयनित किंड्स को हटाने के लिए मैप कम करने वाला काम है।)

अधिक जानकारी के लिए यह छवि देखें


2

यदि आपके पास बहुत अधिक डेटा है, तो वेब इंटरफ़ेस का उपयोग करना समय लेने वाला हो सकता है। App इंजन लांचर उपयोगिता आप चेकबॉक्स 'लांच पर साफ़ डेटासंग्रह' के साथ एक ही बार में सब कुछ नष्ट कर सकते हैं। यह उपयोगिता अब विंडोज और मैक (पायथन फ्रेमवर्क) दोनों के लिए उपलब्ध है।


2

डेवलपमेंट सर्वर के लिए, Google ऐप इंजन लॉन्चर के माध्यम से सर्वर चलाने के बजाय, आप इसे टर्मिनल से चला सकते हैं जैसे:

dev_appserver.py --port = [portnumber] --clear_datastore = yes [nameofapplication]

ex: मेरा एप्लिकेशन "रीडर" पोर्ट 15080 पर चलता है। कोड को संशोधित करने और सर्वर को पुनरारंभ करने के बाद, मैं सिर्फ "dev_appserver.py --port = 15080 --clear_datastore = Yes Reader" चलाता हूं।

यह मेरे लिए अच्छा है।


2

हाल के घटनाक्रम के बारे में जवाब जोड़ना।

Google ने हाल ही में डेटास्टोर व्यवस्थापक सुविधा जोड़ी है। इस कंसोल का उपयोग करके आप अपनी संस्थाओं को बैकअप या हटा सकते हैं।

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


1

मैं अक्सर सभी डेटा स्टोर को हटाना नहीं चाहता हूं, इसलिए मैं /war/WEB-INF/local_db.bin के स्रोत नियंत्रण की एक स्वच्छ प्रतिलिपि खींचता हूं। यह सिर्फ मैं हो सकता है, लेकिन ऐसा लगता है कि देव मोड बंद होने के साथ ही मुझे फ़ाइल को खींचने से पहले शारीरिक रूप से हटाना होगा। यह ग्रहण के लिए तोड़फोड़ प्लगइन का उपयोग करके विंडोज पर है।


0

PHP भिन्नता:

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
for amodel in db.Model.__subclasses__():
                dela=[]
                print amodel
                try:
                    m = amodel()
                    mq = m.all()
                    print mq.count()
                    for mw in mq:
                        dela.append(mw)
                    db.delete(dela)
            #~ print len(dela)

                except:
                    pass

0

यदि आप ndb का उपयोग कर रहे हैं, तो जिस विधि ने मेरे लिए डेटास्टोर को साफ़ करने के लिए काम किया है:

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

1
मुझे नहीं लगता कि यह काम करेगा। Appengine के बारे में शिकायत है कि Sorry, unexpected error: The kind "__Stat_Kind__" is reserved.ऐसा लगता है जैसे appengine में कुछ आंतरिक सांख्यिकी इकाई है जो इस विधि (उनके अंत में संभव बग?) से उजागर हो सकती है
गायब

0

किसी भी डेटास्टोर के लिए, जो ऐप इंजन पर है, स्थानीय के बजाय, आप नए डेटास्टोर एपीआई का उपयोग कर सकते हैं । यहाँ कैसे शुरू करने के लिए एक प्राइमर है

मैंने एक स्क्रिप्ट लिखी जो सभी गैर-निर्मित संस्थाओं को हटाती है। एपीआई बहुत तेजी से बदल रहा है, इसलिए संदर्भ के लिए, मैंने इसे 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
  • svpino के विचार को जारी रखना हटाना के रूप में चिह्नित रिकॉर्ड का पुन: उपयोग करने के लिए ज्ञान है। (उनका विचार हटाने के लिए नहीं था, लेकिन "हटाए गए" अप्रयुक्त रिकॉर्ड के रूप में चिह्नित करें)। काम की प्रतिलिपि को संभालने के लिए कैश / मेमोचे का थोड़ा सा हिस्सा और डेटासोर के लिए (वांछित कार्य के पहले और बाद में) राज्यों का केवल अंतर लिखना बेहतर होगा। बड़े कामों के लिए यह संभव है कि डेटामेस्टर में डेटामेस्टर में बदलाव से बचने के लिए इटर्माडिएट डिफरेंशन चिंकू लिखें। इसे हानि-प्रूफ बनाने के लिए, गुम हुए परिणामों को दोहराने के लिए अखंडता / अस्तित्व के परिणामों की जांच करना और कार्य (या आवश्यक भाग) को फिर से शुरू करना संभव है। जब डेटा अंतर डेटास्टोर को लिखा जाता है, तो आवश्यक गणना कतार में छोड़ दी जाती है।

  • कम किए गए नक्शे के समान अन्य विचार भी विभिन्न प्रकार की इकाई के लिए शार्प इकाई की तरह है, इसलिए इसे एक साथ एकत्र किया जाएगा और अंतिम उपयोगकर्ता के लिए एकल इकाई प्रकार के रूप में दिखाई देगा। प्रविष्टियों को केवल "हटाए गए" के रूप में चिह्नित किया जाता है। जब प्रति शार्द में "डिलीट" एंट्री राशि कुछ सीमा से अधिक हो जाती है, "जिंदा" एंट्रीज को अन्य शार्ड के बीच वितरित किया जाता है, और यह शार्ट हमेशा के लिए बंद हो जाता है और फिर डिव कंसोल (कम लागत पर अनुमान) से मैन्युअल रूप से डिलीट हो जाता है : कंसोल पर कोई ड्रॉप टेबल नहीं लगता है, केवल नियमित मूल्य पर रिकॉर्ड-दर-रिकॉर्ड हटाएं।

  • यह संभव है कि समय समाप्त होने पर अगले प्रयास में जारी रहने की संभावना के साथ रिकॉर्ड्स के बड़े सेट को बिना किसी असफलता (कम से कम स्थानीय रूप से काम करता है) द्वारा क्वेरी द्वारा हटाना संभव है:


    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

आपके पास 2 सरल तरीके हैं,

# 1: लागत बचाने के लिए, पूरी परियोजना को हटा दें

# 2: ts-datastore-orm का उपयोग कर:

https://www.npmjs.com/package/ts-datastore-orm प्रतीक्षारत Entity.truncate (); Truncate प्रति सेकंड 1K पंक्तियों को हटा सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.