Почему aspnet_users использует гуид для идентификатора вместо того, чтобы увеличить интервал? бонусные очки для справки на расширяющихся пользовательских полях

Хорошая проблема.

Во-первых, спросите себя, можете ли вы ограничить шаблон шаблоном «+», или вам также нужно проверить / сопоставить прямоугольники. Например, прямоугольник из [bc] с границей a из a будет соответствовать центральному прямоугольнику ниже, но также будет соответствовать форме «+» [c([bc]*a})v([bc]*a)>([bc]*a)<([bc]*a)] (в вашем синтаксисе)

xxxaaaaaxxx
yzyabcba12d
defabcbass3
oreabcba3s3
s33aaaaas33
k388x.egiee

Если вы можете ограничить его знаком «+», тогда ваша задача будет намного проще. Как сказал ShuggyCoUk, синтаксический анализ RE обычно эквивалентен DFSM - но для одного последовательного ввода, который значительно упрощает работу.

В вашем движке «RE +» вам придется отлаживать не только движок, но и каждое место, где вводятся выражения. Я хотел бы, чтобы компилятор ловил любые ошибки, которые он мог. Учитывая это, вы также можете использовать что-то, что было явно четырьмя RE, например:

REPlus engine = new REPlus('b').North("a{3}")
   .East("a{3}").South("a{3}").West("a{3}");

Однако, в зависимости от вашей реализации это может быть громоздким.

А что касается движка обхода - будут ли шаблоны Север / Запад соответствовать RtL или LtR? Может иметь значение, совпадают ли шаблоны по-другому с или без жадных суб-соответствий.

Кстати, я думаю, что '^' в вашем примере должен быть одним символом слева, вне скобок.

6
задан Rex M 5 November 2009 в 02:10
поделиться

2 ответа

It ensures uniqueness across disconnected systems. Any data store which may need to interface with another previously unconnected datastore can potentially encounter collisions - e.g. they both used int to identify users, now we have to go through a complex resolution process to choose new IDs for the conflicting ones and update all references accordingly.

The downside to using a standard uniqueidentifier in SQL (with newid()) as the primary key is that GUIDs are not sequential, so as new rows are created they are inserted at some arbitrary position in the physical database page, instead of appended to the end. This causes severe page fragmentation for systems that have any substantial insert rate. It can be corrected by using newsequentialid() instead. I discussed this in more detail here.

In general, its best practice to either use newsequentialid() for your GUID primary key, or just don't use GUIDs for the primary key. You can always have a secondary indexed column that stores a GUID, which you can use to keep your references unique.

13
ответ дан 8 December 2019 в 13:00
поделиться

GUID в качестве первичного ключа довольно популярны среди определенных групп программистов, которые на самом деле не (не хотят или не знают) заботятся о своей базовой базе данных.

GUID - это круто, потому что они (почти) гарантированно уникальны, и вы можете создавать их «заранее» на клиенте app в коде .NET.

К сожалению, эти люди не знают об ужасных недостатках (ужасающая фрагментация индекса и, следовательно, потеря производительности) этих вариантов, когда дело касается SQL Server. Многим программистам на самом деле все равно ... а затем винить SQL Server в том, что он медлит как собака.

Если вы хотите использовать GUID для своих первичных ключей (а они действительно полезны , как сказал Рекс М.

5
ответ дан 8 December 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: