DBAtlas · Veritabanı operasyon atlası

Toplu veri yükle (CSV / dosyadan)

Oracle

-- SQL*Loader (kabuktan)
sqlldr kullanici/parola control=musteri.ctl log=yukle.log

-- musteri.ctl içeriği:
-- LOAD DATA INFILE 'musteri.csv'
-- INTO TABLE musteri FIELDS TERMINATED BY ','
-- (id, ad, email)

-- Alternatif: external table ile
CREATE TABLE ext_musteri (id NUMBER, ad VARCHAR2(100))
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY dir_csv
  ACCESS PARAMETERS (FIELDS TERMINATED BY ',') LOCATION ('musteri.csv'));

En yaygın araç SQL*Loader'dır (control dosyasıyla). Dosyayı sorgu gibi okumak için external table kullanılır. Büyük hacimde direct path load (DIRECT=TRUE) hızlıdır.

PostgreSQL

-- Sunucu tarafı (dosya sunucuda, superuser/pg_read_server_files gerekir)
COPY musteri (id, ad, email) FROM '/veri/musteri.csv' WITH (FORMAT csv, HEADER true);

-- İstemci tarafı (psql, dosya istemcide)
\copy musteri (id, ad, email) FROM 'musteri.csv' WITH (FORMAT csv, HEADER true)

COPY sunucudaki dosyayı okur ve yetki ister; psql \copy ise istemci dosyasını okur, ek yetki gerekmez. CSV yüklemenin en hızlı yoludur.

MySQL

-- Sunucu tarafı
LOAD DATA INFILE '/veri/musteri.csv' INTO TABLE musteri
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;

-- İstemci dosyasından
LOAD DATA LOCAL INFILE 'musteri.csv' INTO TABLE musteri
FIELDS TERMINATED BY ',' IGNORE 1 LINES;

LOAD DATA INFILE toplu yüklemenin en hızlı yoludur. LOCAL istemci dosyasını okur ve hem sunucuda (local_infile=ON) hem istemcide etkinleştirilmelidir. secure_file_priv sunucu yolunu kısıtlar.

SQL Server

-- T-SQL BULK INSERT
BULK INSERT musteri FROM 'C:\veri\musteri.csv'
WITH (FORMAT='CSV', FIRSTROW=2, FIELDTERMINATOR=',', ROWTERMINATOR='0x0a');

-- Kabuktan bcp
bcp veritabani.dbo.musteri in musteri.csv -c -t, -S sunucu -T

BULK INSERT dosyayı SQL Server servis hesabının erişebildiği yoldan okur. bcp komut satırı aracıdır; -c karakter modu, -t alan ayırıcı. En hızlısı için TABLOCK ile minimal logging hedeflenir.

MongoDB

# CSV / JSON içe aktar (kabuktan)
mongoimport --db=magaza --collection=musteri --type=csv --headerline --file=musteri.csv

# JSON dizisi için
mongoimport --db=magaza --collection=musteri --file=musteri.json --jsonArray

mongoimport CSV/TSV/JSON yükler; --headerline ilk satırı alan adı sayar. Var olan kayıtları güncellemek için --mode=upsert --upsertFields kullanılır. Büyük veride --numInsertionWorkers hızlandırır.

Redis

# En hızlı: protokol biçiminde besleyip pipe et
cat komutlar.txt | redis-cli --pipe

# komutlar.txt satırları örn:
# SET musteri:1 "Ali"
# SET musteri:2 "Veli"

Toplu yükleme için redis-cli --pipe (mass insert) kullanılır; RESP protokol biçimindeki komutları tek bağlantıdan akıtarak çok hızlıdır. Alternatif olarak pipeline ile komutlar gruplanır.

Elasticsearch

# _bulk API (NDJSON: her doküman için işlem + kaynak satırı)
curl -s -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/musteri/_bulk' --data-binary @veri.ndjson

# veri.ndjson içeriği:
# { "index": {} }
# { "id": 1, "ad": "Ali" }
# { "index": {} }
# { "id": 2, "ad": "Veli" }

_bulk API NDJSON alır (her belge için işlem satırı + veri satırı, dosya \n ile bitmeli). CSV için Logstash, Filebeat veya elasticdump kullanılır. Yükleme sırasında refresh_interval'i kapatmak hızlandırır.

DBAtlas'ta aç →