لینک کوتاه
پنجشنبه , 09 فروردین 1403
0 دیدگاه
با توجه به حذف تغییر ساعت در ابتدای فصل بهار و پاییز ، نیاز به آپدیت این تغییر در سمت سرور میباشد
برای اینکار دستورات زیر را انجام دهید .
cd /tmp
wget https://data.iana.org/time-zones/releases/tzdata2022b.tar.gz
tar -xzvf tzdata2022b.tar.gz
zic asia
rm -rf tzdata2022b.tar.gz
لینک کوتاه
پنجشنبه , 18 خرداد 1402
0 دیدگاه
برای نصب pgbouncer روی اوبونتو/دبیان دستور زیر را وارد کنید
apt install pgbouncer
روی سایر توزیع ها هم مشابه هست .
بعد از نصب pgbouncer باید اون رو کانفیگ کنید که به دیتابیس وصل بشه پس فایل pgbouncer.ini رو باز کنید .
nano /etc/pgbouncer/pgbouncer.ini
و تغییرات زیر رو داخلش اعمال کنید
[databases]
* = port=5432 host=127.0.0.1 user=postgres password=demodemo123456
logfile = /var/log/pgbouncer/pgbouncer.log
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
admin_users = postgres
stats_users = postgres
pool_mode = transaction
بعد نیاز هست در فایل userlist.txt یوزر و پسورد مجاز برای اتصال به pgbouncer رو ست بکنید .
خب ما میخوایم یوزر postgres با پسورد demodemo123456 ست بکنیم با دستور زیر یک هش میسازیم
echo -n "md5"; echo -n "demodemo123456postgres" | md5sum | awk '{print $1}'
خروجی دستور میشه md5f50555910d331025231bb549b0a1eeb1
در فایل /etc/pgbouncer/userlist.txt بصورت زیر وارد میکنیم
"postgres" "md5f50555910d331025231bb549b0a1eeb1"
و سیو میکنیم ، حالا برای اجرای pgbouncer فقط کافیه دستور زیر رو اجرا کنیم .
cd /etc/pgbouncer
pgbouncer pgbouncer.ini -u postgres
حالا به جای پورت 5432 باید به پورت 6432 وصل بشیم که اینطوری به جای اتصال مستقیم به postgresql ، به pgbouncer وصل میشیم .
برای تفاوت این دو میتونیم یک بنچمارک بگیریم .
برای بنچ مارک از pgbench استفاده میکنیم و یک دستور ساده رو تست میکنیم .
یک فایل موقت میسازیم در مسیر
/tmp/select.sql
و دستور زیر رو داخلش قرار میدیم
select 'reza' || now();
حالا نوبت اجرا کردن bgbench هست
ابتدا دستور sudo -su postgres رو میزنیم و سپس دستور زیر رو برای آماده شدن bgbench
bgbench -i postgres
برای اینکه تفاوت استفاده و عدم استفاده از pgbouncer رو ببنیم یکبار مستقیم به postgresql وصل میشیم و یکبار به pgbouncer
دستورات تست به شکل زیر هست
pgbench -c 5 -t 100 -S postgres -C -f /tmp/select.sql -p 5432
pgbench -c 5 -t 100 -S postgres -C -f /tmp/select.sql -p 6432
ونتایج جالب زیر مشخص میشه :
در حالت postgresql
pgbench -c 5 -t 100 -S postgres -C -f /tmp/select.sql -p 5432
transaction type: multiple scripts
scaling factor: 1
query mode: simple
number of clients: 5
number of threads: 1
number of transactions per client: 100
number of transactions actually processed: 500/500
latency average = 82.477 ms
average connection time = 16.100 ms
tps = 60.623285 (including reconnection times)
SQL script 1:
- weight: 1 (targets 50.0% of total)
- 247 transactions (49.4% of total, tps = 29.947903)
- latency average = 0.797 ms
- latency stddev = 0.278 ms
SQL script 2: /tmp/select.sql
- weight: 1 (targets 50.0% of total)
- 253 transactions (50.6% of total, tps = 30.675382)
- latency average = 5.457 ms
- latency stddev = 86.628 ms
در حالت pgbouncer
pgbench -c 5 -t 100 -S postgres -C -f /tmp/select.sql -p 6432
Password:
pgbench (14.8 (Ubuntu 14.8-0ubuntu0.22.04.1))
starting vacuum...end.
transaction type: multiple scripts
scaling factor: 1
query mode: simple
number of clients: 5
number of threads: 1
number of transactions per client: 100
number of transactions actually processed: 500/500
latency average = 4.461 ms
average connection time = 0.860 ms
tps = 1120.724436 (including reconnection times)
SQL script 1:
- weight: 1 (targets 50.0% of total)
- 250 transactions (50.0% of total, tps = 560.362218)
- latency average = 1.060 ms
- latency stddev = 1.257 ms
SQL script 2: /tmp/select.sql
- weight: 1 (targets 50.0% of total)
- 250 transactions (50.0% of total, tps = 560.362218)
- latency average = 1.928 ms
- latency stddev = 8.009 ms
با تشکر ، رضا شیخله
سوالی بود در خدمتم
لینک کوتاه
پنجشنبه , 18 خرداد 1402
0 دیدگاه
برای نصب postgresql ابتدا در اوبونتو دستور
apt install postgresql
را وارد کنید بعد از اینکه نصب تمام شد دستور زیر را وارد کنید که وارد psql بشید
sudo su - postgres
سپس برای تعیین پسورد که در این مثال ما demodemo123456 رو ست میکنیم دستور زیر رو وارد کنید .
psql -c "alter user postgres with password 'demodemo123456'";
برای خروج از محیط psql کافیه دستور \exit
را وارد کنید .
حالا نوبت به کانفیگ pg_hba میرسه در مسیر زیر دنبال فایل pg_hba.conf بگردید
/etc/postgresql/14/main/
بعد فایل رو با nano باز کنید
nano /etc/postgresql/14/main/pg_hba.conf
و دستور زیر را پیدا کنید
# Database administrative login by Unix domain socket
local all postgres peer
اونو تبدیل کنید به
# Database administrative login by Unix domain socket
local all postgres md5
یکبار سرویس postgresql رو رستارت کنید .
service postgresql restart
دیتابیس postgresql با یوزر postgres و پسورد demodemo123456 روی پورت 5432 اجرا و دردسترس هست میتونید از adminer.org جهت مدیریت دیتابیس بصورت تحت وب استفاده بکنید .
اگر php و apache ندارید نصبش کنید
apt install php apache2 php-pdo php-pgsql php-common
وارد مسیر دیفالت آپاچی بشید
cd /var/www/html/
و adminer رو از سایت adminer.org بگیرید .
wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php -O adminer.php
حالا کافیه آی پی سرور رو بزنید
http://127.0.0.1/adminer.php
سوالی داشتید در خدمتم .
لینک کوتاه
چهارشنبه , 26 مرداد 1401
0 دیدگاه
همانطور که باید بدونید استرس تست بخش مهمی از هر پروژه هست که باید حتما انجام بشه و یکی از رایجترین ابزارهای apache benchmark هست اما ممکن هست این ابزار در دسترس نباشد یا بخواهید با ابزارهای دیگر هم این تست رو انجام بدید . دو برنامه دیگر به اسم siege و weighttp عملکرد مشابهی دارند و میتوانید از آنها استفاده کنید .
در این پست دستور معادل در دو برنامه دیگه به اسم siege و weighttp رو معرفی میکنیم .
دستور مثال :
command for Ab :
ab -n 1000 -c 100 https://reza.biz/
command for siege :
siege -q -b -c 100 -r 1000 https://reza.biz/
command for weighttp:
weighttp -n 1000 -c 100 -k https://reza.biz/
لینک کوتاه
یکشنبه , 16 آذر 1399
2 دیدگاه
گاهاً لازمه در ساختار دیتابیس یک فیلد داشته باشید که با استفاده از مقادیر سایر فیلدها مقدار دهی بشود ، بطور مثال فرض کنید دو فیلد نام و نام خانوادگی دارید و سپس یک فیلد نام کامل دارید ، که میخواهید بر اساس دیتای دو فیلد دیگر همیشه مقدار دهی بشود .
در PostgreSQL با استفاده از دستور generated always as امکان پذیر هست .
با هم همین مثال رو بررسی میکنیم . ابتدا یک جدول میسازیم .
CREATE TABLE "test2" ( id SERIAL , first_name VARCHAR(100), last_name VARCHAR(100) , full_name VARCHAR(201) generated always AS (first_name || ' ' || last_name) stored ) ;
و سپس یک رکورد را وارد میکنیم
INSERT INTO "test2" ( "first_name", "last_name" ) VALUES ( 'reza', 'karimi' );
و حالا نتیجه .
لینک کوتاه
یکشنبه , 17 آذر 1398
0 دیدگاه
احتمالا اگر با دیتابیس هایی مثل mysql کار کرده باشید با یک auto increment ساده میتونید فیلد های id رو بصورت auto increment مقدار دهی کنید که خب خیلی عالیه اما توی postgresql معمولا فیلد رو از نوع serial میسازن و خود pg زحمت ساخت یک sequence رو برامون میکشه و الباقی داستان !!
یکی از دوستان توی گروه میخواست به روش mysql اینکارو انجام بده و خب بلطبع راه کارش استفاده از یک تریگر هست !
خب ما یک جدول میسازیم با دو تا فیلد که یکیش id از نوع integer هست .
میتونید روی این فیلد هم index unique بذارید .
-- create table
CREATE TABLE "tbl" (
"id" integer,
"title" character varying(255)
);
کاری که باید انجام بدیم ساخت یک تریگر هست که زمانی که یک insert داخل این جدول رخ میده ، max(id) رو در بیاره و +1 بکنه و برای رکورد جدید اعمال بکنه
-- create function
create or replace function id_increment_tbl()
returns trigger as
$BODY$
DECLARE
an_integer int4 ;
begin
select (max(id)::integer + 1) into an_integer from tbl ;
if an_integer IS NULL then
an_integer:=1;
end if;
NEW.id := an_integer;
return NEW;
end;
$BODY$
LANGUAGE plpgsql;
-- create trigger
CREATE TRIGGER idincrementTrigger
BEFORE INSERT
ON tbl
FOR EACH ROW
EXECUTE PROCEDURE id_increment_tbl();
و حالا تست میکنیم
insert into tbl(title) values ('test');
لینک کوتاه
دوشنبه , 15 مهر 1398
1 دیدگاه
بیت کوین چیست ؟
بیت کوین یک پول دیجیتال غیرمتمرکز بدون پشتوانه است که هیچ دولتی آنرا بعنوان پول قانونی به رسمیت نشناخته است (نکته مثبت :) ). تراکنشهای این شبکه بدون یک مرکز مشخص کار میکند و شبکه آن بصورت همتا به همتا میباشد که این یعنی تراکنشها مستقیما و بدون واسطه بین خود کاربران انجام میشود .
گره های شبکه ، تراکنشها را در یک دفترکل توزیع شده همگانی به اسم بلاک چین یا زنجیره بلاک ذخیره میکنند. یکپارچگی و ترتیب زمانی زنجیره بلاک از طرق رمزنگاری انجام میشود .
ادامه مطلب ...
لینک کوتاه
یکشنبه , 06 مرداد 1398
0 دیدگاه
متاسفانه GitHub مشغول بستن دسترسی کاربرهای ایرانی هست ، لذا کلیه افرادی که سورس هاشون روی GitHub هست توصیه میکنم سریعا به سرویس های دیگه منتقل بکنند .
متاسفانه ممکنه اوضاع روی سرویس های مشابه مثل GitLab هم همین بشه در آینده ، پس یکی از راه حل ها نصب سورس کنترل اختصاصی روی سرور هست .
آموزش نصب GitLab روی سرور
GitLab این امکان رو داره که روی سرور شخصی نصب بشه . اما شایدم بد نباشه یه نگاهی به GitPrep هم بندازید .
GitPrep یک سورس کنترل هست که شبیه به گیت هاب پیاده سازی شده و میتوانید بعنوان سورس کنترل ازش استفاده بکنید و روی سرور شخصی نصب نمایید.
آموزش نصب GitPrep روی سرور
دمو GitPrep