Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> синхронизация базы КПК (sdf) и ПК (mdf), синхронизации базы 
:(
    Опции темы
vutsh
Дата 25.3.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.3.2009

Репутация: нет
Всего: нет



Добрый день!!!
При синхронизации базы КПК (sdf) и ПК (mdf) вышли трудности, относительно связей.
На КПК создаём клиента (он создался под ид 5), далее создаём компанию (он создался под ид 5123) где указано что оно связано с клиентом под ид 5.
Далее пересылаем это всё на ПК (передача осуществляеться инсерты, которые в xml-ке), там исполняется запрос (инсерт) и клиент получается под ид уже НЕ 5, а 8791 вот...и когда мы исполняем (инсерт) для компании то оно говорит мол под ид 5 нечего нету, ну и естественно вываливается ошибка.
Может кто сталкивался с такой проблемо? или знаеть какие нибудь утилы для синхронихации.
Жду ответов... 
PM MAIL   Вверх
PashaPash
Дата 25.3.2009, 11:53 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 8
Всего: 49



vutsh, есть 2 старндартных способа:
1. Обычная репликация SQL Server. http://msdn.microsoft.com/en-us/library/ms152568.aspx
2. Sync services for ADO.NET: http://msdn.microsoft.com/en-us/library/bb726002.aspx



--------------------
PM MAIL WWW   Вверх
jonie
Дата 25.3.2009, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



3) SET INSERT_IDENTITY ON
4) заменить id на GUID-ы и не мучаться с автоинкрементом


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Idsa
Дата 25.3.2009, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(jonie @  26.3.2009,  01:52 Найти цитируемый пост)
4) заменить id на GUID-ы и не мучаться с автоинкрементом

Спорное решение. С некоторых пор я с опаской отношусь к использованию Guid'ов.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
jonie
Дата 25.3.2009, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



и чем же они так тебя напугали?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
PashaPash
Дата 25.3.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 8
Всего: 49



jonie
1. отлаживать неудобно
2. индексы по ним много кушают и тормозят
3. про NEWSEQUENTIALID() даже management studio не знает

Обычный подход - rowguid, и int identity not for replication в качестве PK. Делается автоматом самой студией при настройке репликации с SQL. Более того, в конце management studio код для старта репликации под compact framework выдает...надо только копипастнуть

Это сообщение отредактировал(а) PashaPash - 25.3.2009, 22:22


--------------------
PM MAIL WWW   Вверх
Idsa
Дата 25.3.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



jonie, ууу. Это долгая история smile
Работал я над одним замечательным web-проектом. На этапе проектирования по каким-то причинам (которые мне так и не удалось выяснить) было решено использовать Guid'ы. Как потом оказалось, смысла в этом не было: можно было легко обойтись автоинкрементным id. А между тем Guid'ы:
1. В четыре раза тяжелее int
2. Почем зря фрагментируют индексы. Guid'ы генерировались из .NET'а, поэтому использовать NewSequentiald не было возможности. Хотя можно было прикрутить какой-нибудь workaround вроде этого, но он тоже неидеален
3. Т. к. проект представлял собой Web-приложение, Guid'ы частенько использовались в качестве Get-параметров, поэтому строка запроса даже при одном параметре (не говоря уже о двух и более) выглядела очень некрасиво. Пользователи пугались.

В итоге я решил взять на себя ответственность перевести базу на int'ы. Параллельно решил исправить несколько архитектурных (своих  smile ) багов (хоят, скорее, первопричиной изменений стали именно эти баги, а переход на int'ы стал следствием). Даже несмотря на то, что DAL реализовывался при помощи Entity Framework, переписывать пришлось кучу рутинного кода: приведение типов, Asp.net баиндинг и т. д. Конечно, большинство ошибок исправлялось при помощи Find&Replace... но попариться мне пришлось крепко: все-таки исправить около 1200 ошибок компиляции (да-да, проект был уже далеко не начальном этапе развития) - это не шутки. Я сел вечером в пятницу, закончил вечером воскресенья (вносил изменения в выходные, пока остальные не работали над кодом). Давно я так не волновался: был страх запороть все. Конечно, я в любой момент мог откатиться обратно... но делать этого очень не хотелось.

Как же приятно было в итоге увидеть желаемый результат... smile

К слову, я допустил один серьезный промах. Вечером в пятницу закоммитились не все, а т. к. апдейтиться в понедельник не имело смысла (как и следовало ожидать, merge не справлялся),  приходилось заново сливать копию (ведь коммититься без апдейта - грех smile ). Поэтому незакоммиченные изменения тем, кто не закоммитился в пятницу вечером, пришлось вносить вручную. Благо, абсолютное большинство все же закоммитилось в пятницу, поэтому серьезных проблем это не вызвало (а могло бы...).

Вот такая дурацкая история. Здесь, конечно, по большому счету виноваты не Guid'ы, а моя кривая библиотека hands.dll... но тем не менее после этого случая к Guid'ам я отношусь с опаской smile


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Idsa
Дата 25.3.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(PashaPash @  26.3.2009,  02:21 Найти цитируемый пост)
индексы по ним много кушают и тормозят

Вот хороший анализ Guid'ов в плане производительности: раздва. Если Select выполняется терпимо, то Insert тормозит не по-детски.

Цитата(PashaPash @  26.3.2009,  02:21 Найти цитируемый пост)
про NEWSEQUENTIALID() даже management studio не знает

В смысле?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
jonie
Дата 26.3.2009, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



насчет тормозов конкретно в этой задаче несогласен. SQL CE ограничен и очень даже сильно.
Цитата

1. В четыре раза тяжелее int
ну вот конкретно это лично меня не пугает. Сейчас база с которой я работаю более 1800 ГБ ...

Цитата

3. Т. к. проект представлял собой Web-приложение, Guid'ы частенько использовались в качестве Get-параметров
ну это Ваша багофича, POSTтитесь да прибудет с вами джа )

Цитата

К слову, я допустил один серьезный промах. Вечером в пятницу закоммитились не все, а т. к. апдейтиться в понедельник не имело смысла (как и следовало ожидать, merge не справлялся),  приходилось заново сливать копию (ведь коммититься без апдейта - грех  ). Поэтому незакоммиченные изменения тем, кто не закоммитился в пятницу вечером, пришлось вносить вручную. Благо, абсолютное большинство все же закоммитилось в пятницу, поэтому серьезных проблем это не вызвало (а могло бы...).
на прошлой недели я убил почти трое суток за мерджем... правда не из-за забывчивости мерджить бранч с транком, а из-за огромного количества правок "мега супер крутыми и удобными инструментами рефакторинга и автогенерации" )....

в остальном, конечно, да.. но стоит ли данная задача так заморачиваться на скорость - решать автору.
репликация доступна начиная с версии стандарт, если не ошибаюсь.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
vutsh
Дата 26.3.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.3.2009

Репутация: нет
Всего: нет



Да скорее всего буду делать через гуиды...
PM MAIL   Вверх
PashaPash
Дата 26.3.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 8
Всего: 49



Цитата(vutsh @  26.3.2009,  10:44 Найти цитируемый пост)
Да скорее всего буду делать через гуиды... 

Только не вручную smile заюзай репликацию, она сделает через гуиды почти автоматом.

jonie, а на нас сейчас кастомер в суд хочет подать и деньги забрать. Типа, софт не соответствует общепринятым стандартам. 
Придирки:
1. Использование GUID в качестве PK
2. Использование newid() вместо NEWSEQUENTIALID()
3. База не в 4-й NF
4. Использование ORM вместо ручной работы с sql....

Цитата(Idsa @  25.3.2009,  23:29 Найти цитируемый пост)
про NEWSEQUENTIALID() даже management studio не знает
В смысле? 

А ты попробуй в дизайнере таблиц вбить значение по умолчанию (NEWSEQUENTIALID()) для колонки uniqueidentifier - она ругнется на синтаксическую ошибку, потребует 2 раза подтвердить перед сохранением.



--------------------
PM MAIL WWW   Вверх
Idsa
Дата 27.3.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(PashaPash @  26.3.2009,  16:36 Найти цитируемый пост)
Использование GUID в качестве PK

А что вас побудило использовать Guid'ы?

Цитата(PashaPash @  26.3.2009,  16:36 Найти цитируемый пост)
Использование newid() вместо NEWSEQUENTIALID()

Весьма спорная претензия.

Цитата(PashaPash @  26.3.2009,  16:36 Найти цитируемый пост)
Использование ORM вместо ручной работы с sql....

А в чем претензия? Это каким-то образом снизило производительность или ограничило функционал? И, кстати, какая ORM использовалась? smile

Цитата(PashaPash @  26.3.2009,  16:36 Найти цитируемый пост)
А ты попробуй в дизайнере таблиц вбить значение по умолчанию (NEWSEQUENTIALID()) для колонки uniqueidentifier - она ругнется на синтаксическую ошибку, потребует 2 раза подтвердить перед сохранением.

Хех... Действительно smile Попробовал в Management Studio от 2008-го Sql Server - та же фигня.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
PashaPash
Дата 27.3.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 8
Всего: 49



Цитата(Idsa @  27.3.2009,  17:11 Найти цитируемый пост)
А что вас побудило использовать Guid'ы?

Не нас. Моего предшественника ;)
Цитата(Idsa @  27.3.2009,  17:11 Найти цитируемый пост)
Весьма спорная претензия.

Для сайта с /как выяснилось при сдаче проекта/ с требованием держать 1M транзакций в месяц -> необходимостью кластеризации -> упорядоченность ключа по времени - вполне нормальное требование.
Цитата(Idsa @  27.3.2009,  17:11 Найти цитируемый пост)

А в чем претензия? Это каким-то образом снизило производительность или ограничило функционал? И, кстати, какая ORM использовалась?

Претензия примерно такая - сам заказчик писали проект на ASP.NET, и там орм тормозил. Поэтому все ормы тормозят. Потому что они выбирают данные из отдеельных таблиц, а не из специально обученных вьюшек...бла-бла-бла..."общепринятые индустриальные стандарты требуют ручной работы с sql, все остальное is evil". И вот докажи что не олень...

Юзали NetTiers (кстати, !!!НИКОГДА!!! не используйте NetTiers). 


--------------------
PM MAIL WWW   Вверх
Idsa
Дата 27.3.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(PashaPash @  27.3.2009,  21:49 Найти цитируемый пост)
упорядоченность ключа по времени

Ааа. Вон оно что.

Цитата(PashaPash @  27.3.2009,  21:49 Найти цитируемый пост)
общепринятые индустриальные стандарты требуют ручной работы с sql

А что это за стандарты такие? Где почитать? smile ORM - уже мэйнстрим, и это факт.

Цитата(PashaPash @  27.3.2009,  21:49 Найти цитируемый пост)
И вот докажи что не олень...

А тесты, доказывающие обратное, не пробовали проводить?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
PashaPash
Дата 27.3.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 8
Всего: 49



Цитата(Idsa @  27.3.2009,  18:13 Найти цитируемый пост)
А что это за стандарты такие? Где почитать? smile ORM - уже мэйнстрим, и это факт.

Мейнстрим по какому показателю? По количесву проектов - мейнстрим - это руби и php, без всяких орм. А аргументы в пользу ручной работы с sql всегда найти можно...например приложение будет расти, и придется делать какие-то "ручные оптимизации". А орм не дает полного контроля. А заказчику он воможно понадобится, поэтому "перепишите все заново, без ORM, и бесплатно".

Цитата(Idsa @  27.3.2009,  18:13 Найти цитируемый пост)
А тесты, доказывающие обратное, не пробовали проводить? 

Так заказчик тоже тесты проводить умеет... И к тому же он old school PHP-ник




--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1040 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.