PDA

View Full Version : query زدن روی پایگاه داده‌ی HBase



M.soheil
سه شنبه 04 اسفند 1394, 03:01 صبح
سلام

امکانش هست روی پایگاه داه‌ی HBase کوئری بزنیم، یعنی مثل پایگاه داده‌های رابطه‌ای روی ستون‌های HBase با یه چیزی مثل عبارت شرطی، سطر مورد نظر رو بازیابی کنیم؟

تا اونجایی که من تحقیق کردم فقط با استفاده از کلید هر سطر می‌تونیم اجزای اون رو واکشی کنیم ولی من دنبال راهی هستم که با دونستن مقدار ستون‌ها بتونیم یک سطر رو واکشی کنیم.

-سیّد-
جمعه 14 اسفند 1394, 11:46 صبح
سلام
همونطور که گفتید، توی HBase برای خوندن اطلاعات، فقط می‌شه از طریق سطر (row) اقدام کرد، یا می‌شه به صورت range scan اطلاعات رو از یه سطر تا یه سطر خوند.

چیزی که شما گفتید، یعنی این که از طریق ستون‌ها بشه به اطلاعات دسترسی پیدا کرد، که می‌شه secondary index. تا جایی که من می‌دونم، HBase از secondary index پشتیبانی نمی‌کنه. البته کتابخونه‌ها و نرم‌افزارهای دیگه‌ای هستن که روی HBase این امکان رو به شما می‌دن (مثل hindex (https://github.com/Huawei-Hadoop/hindex))، ولی خود HBase چنین چیزی نداره.

برای query زدن، می‌تونید از نرم‌افزارهایی مثل Hive, Pig یا Phoenix استفاده کنید:
Hive (http://yooz.ir/search/?q=hive): سایت (http://hive.apache.org/) - ویکیپدیا (https://en.wikipedia.org/wiki/Apache_Hive)
Pig (http://yooz.ir/search/?q=pig): سایت (http://pig.apache.org/) - ویکیپدیا (https://en.wikipedia.org/wiki/Pig_%28programming_tool%29)
Phoenix (http://yooz.ir/search/?q=apache%20phoenix): سایت (http://phoenix.apache.org/) - ویکیپدیا (https://en.wikipedia.org/wiki/Apache_Phoenix)

شما خودتون هم می‌تونید از طریق Scan به کمک Filter ها، فقط محدوده‌ی خاصی رو scan کنید. یا می‌تونید با استفاده از co-processor های HBase، کارهای خاصی رو سمت سرور انجام بدید و نتایج رو برای client ارسال کنید. مثلاً اگه بخواین جمع یه سری از داده‌ها رو بدونید، می‌تونید اولاً با کمک Filter ها فقط اون بخشی رو که می‌خواین scan کنید (Filter ها سمت سرور عمل می‌کنن و در نتیجه کل داده نمیاد سمت client و بعد فیلتر بشه، بلکه فقط اون بخشی که مورد نیاز هست میاد سمت client)، ثانیاً به جای این که داده‌ها رو توسط scan بفرستید به client و بعد اونجا جمعشون بزنید (که مستلزم رد و بدل شدن مقادیر زیادی داده بین سرورها و client هست)، می‌تونید توسط coprocessor سمت سرور جمع رو انجام بدید و فقط نتیجه رو برای client ارسال کنید.