SQL Server or DB_File?

10 отговора 530 прегледа
#1

SQL Server or DB_File?

Tezi koito sa rabotili s SQL Server znaqt che connect-a kum server-a stava dosta bavno.
Tova koeto iskam e da update-vam okolo 20.000 zapisa v tablica (mnogo prosta: key->value, abe edin hash trebe da ide v tablicata). Reshenieto e s edin slojen i ogromen UPDATE ...
Problema e che tova se pravi dosta chesto i ne iskam persistent connection kum server-a.

Nqkoi ima li nabljudeniq i sravneniq za neshto podobno napraveno s SQL Server?

V momenta sum go napravil na Perl i izpolzvam DB_File (Berkeley DB) za store na toq hash, kato mislq da go napisha na C, che pak e bavno :(

Отговор
в отговор на Дизeлджия #2

Re: SQL Server or DB_File?

zashto ne si podgotvish dannite v edin file i da gi importnesh s bcp

az toku sto napravih obratnoto ot SQL Server kam Sybase i stana dovolno barzo - predi tova drop na vsichki indexi i tn
posle gi recreate-vash

kato v sluchaia stava duma za po 5-6 miliona zapisa
osven tova mashinata sas Sybase e dovolno slaba PPro na 200 MHz

skoro ste mi se nalozhi da prehvarlia oste edna baza koiato se update-va s po 40-50 hiliadi zapisa na den - togava neznam kak ste e

Отговор
в отговор на Дизeлджия #3

Re: SQL Server or DB_File?

Dai
UPDATE ...
Da pomislim malko

Linux is like a wigwam - No Windows, No Gates, Apache inside
Отговор
в отговор на salle #4

Re: SQL Server or DB_File?

V sushtnost tova koeto si misleh s edin UPDATE nqma da stane:(

update hash_name set value_col=?? where key_col in (key1, key2 ...)

taka shte promenq vsichki value_col na edna stoinost ili moga da gi promenq po edin i susht nachin value_col=value_col+??:(

i oshte, ako key-a go nqma trqbva da se insert-ne:((

Trqbva mi neshto takova:

update hash_name set value_col in (val1, val2 ..) where key_col in (key1, key2 ...)

a MySql-a ne go moje, pone ne taka.

Отговор
в отговор на Дизeлджия #5

Re: SQL Server or DB_File?

Ne razbrah savsem problema ama...

update hash_name value_col=value_col+xx raboti bez problemi

Estestveno xx mozhe da e chislo, colona, funkcia i t.n.

> i oshte, ako key-a go nqma trqbva da se insert-ne:((

Ami procheti kakvo pravi v MySQL
REPLACE INTO TABLE ....

Formata e tochno kato na INSERT INTO TABLE - s tazi razlika che ako PRIMARY KEY veche go ima ne dava greshka a pravi UPDATE

t.e.
DELETE FROM TABLE WHERE pri_key = (tozi koito e vuv values(...));
INSERT INTO TABLE ....;

Linux is like a wigwam - No Windows, No Gates, Apache inside
Отговор
в отговор на salle #6

Re: SQL Server or DB_File?

"update hash_name value_col=value_col+xx"
Problema e che xx e razlichno za vseki zapis!

Za REPLACE, da znam, taka trqbva da e.

Iskam s edin REPLACE da update-vam vsichki zapisi kato promenq stoinosta na dadenena kolona s razlichna stoinist.

Отговор
в отговор на Дизeлджия #7

Re: SQL Server or DB_File?

Kakvo znachenie ima che
value_col=value_col+xx
e razlichno zqa vseki red?

Pak ne razbiram problema.

xx mozhe da e kakvato si iskash kombinacia ot funkcii formuli, concat(), if(), case when .. then ... when .. then ... end

I kvo li ne oshte

Linux is like a wigwam - No Windows, No Gates, Apache inside
Отговор
в отговор на salle #8

Re: SQL Server or DB_File?

Ok, davam primer:

talica hash s koloni key i value.

iskam s edin uptade(replace) na promenq nqkolko value na key.

$hash{key1} = value1
$hash{key2} = value2
$hash{key3} = value3

kato key* sa imena, a value* sa int.

Ideq kak tochno da stane?

Отговор
в отговор на Дизeлджия #9

Re: SQL Server or DB_File?

mysql> create table hash (key char(16), value char(16));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into hash (var) values('key1'), ('key2'), ('key3');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0


mysql> select * from hash;
+------+-------+
| var | value |
+------+-------+
| key1 | NULL |
| key2 | NULL |
| key3 | NULL |
+------+-------+
3 rows in set (0.00 sec)

mysql> update hash set value = case var when 'key1' then 'value1' when 'key2' then 'value1' when 'key3' then 'value3' end;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0

mysql> select * from hash;
+------+--------+
| var | value |
+------+--------+
| key1 | value1 |
| key2 | value1 |
| key3 | value3 |
+------+--------+
3 rows in set (0.00 sec)



-----------
Taka stava li?

Ne kazvam che e 'inteligenten' nachin :)
Spored men s TEMP tablica e po-dobroto reshenie

update hash set value = case key when 'key1' then 'value1' when 'key2' then 'value1' when 'key3' then 'value3' end;

Linux is like a wigwam - No Windows, No Gates, Apache inside
Отговор
в отговор на salle #10

Re: SQL Server or DB_File?

Da, super. Ne predpolagah che moje da se napravi taka! Ostava da go probvam za da vidq kak se durji pri golqm broi redove.

Mnoogo blagodarq za pomoshta!

Отговор
в отговор на Дизeлджия #11

Re: SQL Server or DB_File?

create temporary table ttt select <kakvoto ti triabva>;

I posle JOIN koito da napravi heshtata, drop table ttt;

:))

Linux is like a wigwam - No Windows, No Gates, Apache inside
Отговор