আমি কীভাবে টাইম সিরিজটি মংডোবিতে সঞ্চয় করব?


11

আমাকে সময় সিরিজের একটি ডাটাবেস তৈরি করতে হবে এবং নিম্নলিখিত কাজগুলি সম্পাদন করতে হবে:

  • নতুন সময় সিরিজ তৈরি করুন
  • বিদ্যমান সময় সিরিজ আপডেট করুন
  • একবারে এক বা একাধিক সময় সিরিজ জিজ্ঞাসা করুন (উদাহরণস্বরূপ একই তারিখের জন্য সমস্ত সময়ের সিরিজ ইত্যাদি ...)

মঙ্গো কি সেটির সাথে খাপ খাইয়ে নিয়েছে এবং যদি হ্যাঁ হয় তবে কীভাবে আমার ডাটাবেসটি গঠন করা উচিত? (ওয়ান টাইম সেরি = একটি ডকুমেন্ট? বা একটি ডকুমেন্ট = টাইম সেরির একটি প্রবেশিকা এবং এই সমস্ত নথিই সংগ্রহটি তৈরি করে যা পুরো সময়ের সিরিজ?)

আমি এখানে কিছুটা হারিয়েছি এবং কোনও তথ্য খুঁজে পাওয়া আমার পক্ষে কঠিন বলে মনে হচ্ছে সাধারণত মঙ্গো খুব নমনীয় হিসাবে উপস্থাপিত হয় তাই ব্যবহারকারীর অবকাঠামোতে পছন্দ থাকে।

টিউটোরিয়ালের যে কোনও লিঙ্ক যা মঙ্গোতে সময় সিরিজ পরিচালনা করার জন্য বিশেষভাবে ব্যাখ্যা করে তা খুব স্বাগত।

ধন্যবাদ!



একটি আপডেট করা শ্বেত পত্র রয়েছে যা মঙ্গোডিবিতে সময়-সিরিজ নিয়ে আলোচনা করে। mongodb.com/collateral/time-series-best-practices
রবার্ট ওয়াল্টার্স

উত্তর:


6

আমি প্রতিটি নথিতে একক সময় সিরিজের প্রবেশের পরামর্শ দিচ্ছি। প্রতি নথি প্রতি একাধিক এন্ট্রি সংরক্ষণ করার সাথে কিছু সমস্যা রয়েছে:

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

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

মোগোডিবি ব্যবহার করে এমন একটি ইভেন্ট লগিং লাইব্রেরির বিএসন নথিটির একটি উদাহরণ এখানে রয়েছে :

Example format of generated bson document:
{
    'thread': -1216977216,
    'level': 'ERROR',
    'timestamp': Timestamp(1290895671, 63),
    'message': 'test message',
    'fileName': '/var/projects/python/log4mongo-python/tests/test_mongo_handler.py',
    'lineNumber': 38,
    'method': 'test_emit_exception',
    'loggerName':  'testLogger',
    'exception': {
        'stackTrace': 'Traceback (most recent call last):
                       File "/var/projects/python/log4mongo-python/tests/test_mongo_handler.py", line 36, in test_emit_exception
                       raise Exception(\'exc1\')
                       Exception: exc1',
        'message': 'exc1',
        'code': 0
    }
}

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

এখানে আরও একটি অনুরূপ মুক্ত উত্স প্রকল্প: জারকভ


[আপডেট] @ রকসায়েন্সের মন্তব্যের জবাবে আমি আরও কিছু উল্লেখ যুক্ত করেছি:


আমার সময় সিরিজে বেশ কয়েক বছর ধরে ডেটা ডেটা থাকলে তা প্রচুর নথি হতে চলেছে !!! এত দলিল থাকা কি ইস্যু নয়? একটি স্কয়ার ব্যাকগ্রাউন্ড থেকে আসার পরে, আমি এটি খুব স্মৃতি কার্যকর বলে মনে করি না। (একই সময়ের সিরিজের সমস্ত ডেটা পয়েন্টের জন্য যেমন অনেকগুলি পুনরাবৃত্তি হবে)
রকসায়েন্স

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

2

আমি এই প্রশ্নটি এসওতে পেয়েছি ( /programming/4814167/storing-time-series-data-relational-or-non ) যেখানে ওপিতে একটি টাইম সিরিজ কীভাবে সংরক্ষণ করতে হয় তা জিজ্ঞাসা করে। যদিও তার প্রশ্নটি কোনও নোএসকিউএল ডাটাবেস বা আরডিবিএমএস ব্যবহারের চারপাশে আরও ভিত্তিক, এবং আপনি কোনও নোএসকিউএল ডিবি ব্যবহারে বেশ সেট আপ করেছেন বলে মনে হচ্ছে।

" সময়-সিরিজ ডেটার অনন্য ডেটাবেস প্রয়োজনীয়তা " এই নিবন্ধটিও খুঁজে পেয়েছিল যা দরকারী হতে পারে।

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


2

হ্যাঁ অবশ্যই, নোএসকিউএল ডাটাবেস traditionalতিহ্যগত আরডিবিএমএসের চেয়ে টাইমসরিজ ডেটা সংরক্ষণ করার পক্ষে আরও ভাল স্যুট।

হ্যাঁ মঙ্গোডিবি এই ব্যবহারের ক্ষেত্রে ব্যতিক্রমীভাবে মানিয়ে গেছে।

- আপনার ডাটাবেসটি কীভাবে গঠন করা উচিত? একটি দস্তাবেজ = এক সময়ের সিরিজ ইনপুট ভিএস একাধিক সময় সিরিজ।

উত্তরটি একটি নথিতে একাধিক টাইমসারিগুলিতে সঞ্চয় করা হয়। কম দস্তাবেজ থাকা কম পাঠের সাথে পারফরম্যান্সে সহায়তা করবে। একটি কৌশল হ'ল পূর্বনির্ধারিত মানগুলির সাথে আপনার দস্তাবেজটি প্রস্তুত করা। এটি রেকর্ড প্যাডিং এড়িয়ে দস্তাবেজ আপডেট করার অনুকূলিতকরণ করবে ।

এক মিনিটের ব্যবধানে কীভাবে সর্বোত্তমভাবে এক ঘন্টা মূল্য টাইমসারিগুলি সঞ্চয় করতে হয় সে সম্পর্কে এখানে একটি স্কিমা উদাহরণ রয়েছে:

{
  timestamp_hour: ISODate("2015-07-02T23:00:00.000Z"),
  type: memory_used”,
  values: {
    0: 999999,
    1: 1000000, 
    …,
    58: 0,
    59: 0
  }
}

আপনি এটি 0 টি মান দিয়ে শুরু করেছেন এবং তারপরে আপডেটগুলি অনুকূলিত করা হবে। রিডগুলি অনুকূলিত করা হয়েছে কারণ 60 এর পরিবর্তে একটি ডকুমেন্ট পড়ে ized

এখানে একটি টিউটোরিয়ালটির লিঙ্ক এখানে সরকারী মঙ্গোডিবি ব্লগ থেকে মঙ্গোডিবিতে কীভাবে সময় সিরিজ পরিচালনা করবেন তা স্পষ্টভাবে ব্যাখ্যা করে: http://blog.mongodb.org/post/65517193370/schema-design-for-time-series-data-in- MongoDB


1
একটি নথির মধ্যে বুকিং ডেটা পারফরম্যান্স এবং সংস্থান ব্যবহার থেকে ভাল। মংগোডিবি সেরা অভ্যাসের সাদা কাগজের জন্য আপডেট হওয়া সময় সিরিজে তিনটি স্কিমা পরিস্থিতি আলোচনা করা হয়েছে। mongodb.com/collateral/time-series-best-practices
রবার্ট ওয়াল্টার্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.