سؤال

لدي هذه الفئة التي أريد الاستمرار في استخدامها ، ستمثل هذه الفئة بيانات أكبر من 1 ميجابايت ، لذا هناك قائمة بكائنات النقطة التي تمثل جزءا من مصفوفة البايت المخزنة التي يقل حجمها عن 1 ميجابايت:

@Entity
public class BigBlob {

    @Id
    private Long id;
    public static final int FRAGMENT_LIMIT = 777 * 1024;
    @Serialized
    private List<Blob> fragments = new ArrayList<Blob>();

    ...

}

ومع ذلك ، فإن" الأجزاء " يتم تسلسلها ، مما سيجعل حجم هذه الفئة/الكائن الكبير أكبر من 1 ميجابايت.

تسبب هذا الخطأ:

com.google.apphosting.api.ApiProxy$RequestTooLargeException: The request to API call datastore_v3.Put() was too large.

إذا كنت تستخدم @الشرح جزءا لا يتجزأ من أحصل على هذا الخطأ:

Cannot place array or collection properties inside @Embedded arrays or collections

كيف يمكنني التأكد من أن" شظايا " يتم تخزينها ككيان منفصل?

راجع للشغل ، لدي بالفعل منطق تقسيم البايت الذي يقطع صفيف البايت بالكامل ويضع الأجزاء في List من Blob لذلك لا يتعلق هذا السؤال بكيفية تقطيع البايتات.

في الغالب ما أريد معرفته هو أكثر على الجانب المستمر.

هل كانت مفيدة؟

المحلول

الجواب ريك هو حقا أفضل متجر النقط في بلوبستور ، وخاصة إذا كنت جديدا على غاي وجود القضايا المفاهيمية مع مخزن البيانات.

من ناحية أخرى ، هناك بعض الأسباب الوجيهة لاستخدام الكيانات المقسمة لتخزين النقط ، خاصة إذا كنت تقوم بتخزين بيانات قريبة من حافة 1 متر.لن ترغب في القيام بذلك باستخدام نقاط 100 ميجابايت ، ولكن يمكن أن تكون نقاط 2 ميجابايت منطقية.

أولا وقبل كل شيء ، كنت لا تريد تسلسل أو جزءا لا يتجزأ.هذه ببساطة طرق لهيكلة البيانات داخل كيان واحد.

أيضا ، لا يوجد تعليق توضيحي سحري يتيح لك تقسيم النقط عبر الكيانات.عليك أن تفعل كل شيء باليد.لا تحتاج إلى إنشاء كيان رئيسي أو جذر;ما عليك سوى إنشاء جميع أجزاء الكيان مع أحد الوالدين المحدد بواسطة معرف (ولكن لا يوجد كيان فعلي) واستخدام استعلام سلف() لجلب جميع القطع.

نصائح أخرى

يجب تخزينه في بلوبستور ومجرد حفظ بلوبكي في تشييء.تشييء يعمل على رأس مخزن البيانات ، وليس بلوبستور.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top