رونمایی از پخته‌ترین و کاربردی‌ترین محصولات آموزشی سون‌لرن با کلی آفرهای ویژه🔥
۰ ثانیه
۰ دقیقه
۰ ساعت
۱۱ محمد زمانی
جلوگیری از ذخیره اطلاعات تکراری بر اساس چند فیلد منحصر به فرد
جامعه فلاتر ایجاد شده در ۲۴ فروردین ۱۴۰۲

سلام.

من هرچه جستجو کردم این مشکل رو نتونستم حل کنم و واقعا عجیبه برام قابلیت به این مهمی در hive وجود نداشته باشه.

به عنوان مثال من میخوام اطلاعات یک مشتری را در hive ذخیره کنم اما زمانی که نام و نام خانوادگی و ایمیل همزمان با هم متفاوت از نام و نام خانوادگی و ایمیل افراد قبلی باشه که ذخیره شدن.

این مورد رو چجوری میتونم هندل کنم؟

سلام. وقتی اطلاعات مشتری جدید متفاوت از قبلی هست چی میشه؟ متوجه نشدم

یلدا محصلی ۲۴ فروردین ۱۴۰۲، ۱۴:۳۲

به عنوان مثال مشتری اول مشخصاتش به اینصورت ذخیره شده:

نام: محمد

نام خانوادگی زمانی

ایمیل: mohammad@gmail.com

مشتری دوم اگر خواست ثبت نام کنه و اطلاعاتش دقیقا مثل مشتری( محمد) بود ذخیره نشه ولی مثلا ایمیل و نامش متفاوت بود میتونه ذخیره بشه

محمد زمانی ۲۴ فروردین ۱۴۰۲، ۱۷:۵۵

متد add رو بررسی کردید؟ همچنین شما میتونید isInBox رو روی دیتایی که میخواید ذخیره کنید فراخوانی کنید و در صورتی که این دیتا در باکس وجود داشت ذخیره اش نکنید

یلدا محصلی ۲۴ فروردین ۱۴۰۲، ۲۰:۲۱

بله متد add چیزی نداره.

متد isInbox هم بر اساس ایندکس فقط بررسی می‌کنه نه داده چک میکنه اگه ایندکس وجود داشت مقادیر رو آپدیت میکنه وجود نداشت ذخیره می‌کنه

محمد زمانی ۲۵ فروردین ۱۴۰۲، ۰۹:۵۳

LazyBox دارید؟ طبق داکیومنت تنها در این صورت کلید رو چک می‌کنه در غیر این صورت ابجکت بررسی میشه.

یک کار دیگه هم این هست که از متد put استفاده کنید و خودتون کلیدش رو تنظیم کنید. در این حالت می‌تونید با مقایسه کلید تصمیم بگیرید اضافه کنید یا نه. کلیدتون میتونه خروجی تابع toString باشه (باید overrideش کنید).

یلدا محصلی ۲۵ فروردین ۱۴۰۲، ۱۲:۰۹

اگه کلید انتخاب بشه حجم داده ذخیره شده زیاد میشه یعنی به ازای هر آبجکت و داده هاش به همون اندازه کلید تعیین بشه.

و البته وابسطگی بین آبجکت‌ها هم به مشکل میخوره.

عملا من هنوز متوجه نشدم با اینکه hive به این اندازه ناقص هست چرا همه تاکید به استفاده از اون رو دارن

محمد زمانی ۲۵ فروردین ۱۴۰۲، ۱۵:۰۲

شما کلید هم نذارید خودش این مسئله رو از طریق auto increment هندل میکنه. شما باید باتوجه به نیاز به مسئله تون باید پایگاه داده انتخاب کنید.

اگر نیازمندی تون با nosql حل میشه، این پکیج رو چک کنید.

یلدا محصلی ۲۵ فروردین ۱۴۰۲، ۱۶:۵۴

حجم اطلاعات و واکشی داده‌ها انقدر زیاد نیست که سرعت خیلی تاثیرگذار باشه.

برام پایگاه داده ای مهم‌تر هست که قابلیت توسعه داشته باشه و در پلتفرم اندروید و ios به خوبی کار کنه و query نوشتن دست و پاگیر نشه.

شما فرض کنید مدل زیر رو داریم:

Customer {
	Firstname
	Lastname
	DateOfBirth
	PhoneNumber
	Email
	BankAccountNumber
}

در این مدل شخص دیگری نباید هنگام ثبت نام FirstName,LastName,DateOfBirth با نفرات قبلی یکسان باشد و همچنین ایمیلش هم جدا باید ذخیره شود و تکراری نباشد.

طبق این صحبت‌ها پیشنهاد و راه حل شما چیه؟

محمد زمانی ۲۶ فروردین ۱۴۰۲، ۰۷:۰۸

سناریویی که مطرح کردید اونقدر پیچیده نیست که که کو‍ئری دست و پا گیری داشته باشه. در صورتی که بین این دو جدول رابطه ای باشه حتما باید از sql استفاده کنید. در غیر این صورت از لحاظ سختی و اسونی تفاوت زیادی بین sql و nosql نیست. ضمن اینکه برای جلوگیری از تکراری بودن ایمیل باید به عنوان کلید اصلی تعریفش کنید.

اگر با sql آشنایی ندارید، درموردش سرچ کنید اون وقت بهتر می‌تونید تصمیم بگیرید.

یلدا محصلی ۲۶ فروردین ۱۴۰۲، ۱۴:۲۱

بله با sql کار کردم و خب بهترین داخل فلاتر هم sqflite هست که متاسفانه باید کوئری هارو دستی نوشت.

این سناریو که مطرح کردم ی بخش خیلی کوچیک بود و قطعا قراره یک برنامه کاربردی نوشته بشه نه تستی و در آینده پیچیده‌تر هم میشه برای همین انقدر درگیر انتخاب پایگاه داده مناسب هستم.

باز هم ممنون از پاسخگوییتون

محمد زمانی ۲۷ فروردین ۱۴۰۲، ۰۷:۳۹

کتابخانه drift و floor رو هم بررسی کنید. خواهش میکنم وظیفه است. اگر سوالی باشه درخدمتم در غیر این صورت لطفا تاپیک رو ببندید

بهترین پاسخ
یلدا محصلی ۲۷ فروردین ۱۴۰۲، ۱۴:۱۱