Я работаю над проектом, который требует функции кеширования ключа/значения, но приложение будет существовать в очень ограниченной среде, в которой не поддерживает любой из отраслевых стандартов методы кэширования памяти, такие как ASP.NET Cache, memcached, AppFabric.Типы данных таблицы базы данных для хранения кеша ключа/значения
Единственная опция, которую мы имеем в этой ограничительной среде, - это база данных MS SQL. Мы должны создать простую таблицу ключей/значений для удовлетворения наших потребностей в кешировании/ценности. Скорее всего, мы будем сериализовать данные как JSON, но я не уверен, какой будет лучший тип данных для ключа. Очевидно, что он должен быть уникальным ключом и должен быть доступен для чтения программистом, получающим и устанавливающим кеш. Он также должен быть быстрым, так как мы уже потеряем производительность, не имея доступа к кеш-памяти «в памяти».
Я использую для того, чтобы мой основной столбец ключей был значением int или bigint. В этом случае следует первичный ключ (ключ кэша) быть типом CHAR или VARCHAR данных, так как все запросы будут:
SELECT value FROM CacheTable WHERE key = 'keyname'
Я также видел сообщения об использовании md5 хэша, но и другие сообщения указало, что хеширование не может быть полагался на создание уникальных ключей все время. Я в основном после некоторых советов по типу данных, и скорее, или не в столбце «ключ» должен быть первичный ключ, или если я все же должен создать первичный ключ int или bigint (хотя он, вероятно, не будет использоваться).
В результате мы после создания класса кэширования, похожего на родное кэширование .NET, где мы можем создать статический класс, который вытягивает из таблицы базы данных, такие как:
CustomDatabaseCache.Set(string key, object value);
CustomDatabaseCache.Get(string key)
Сколько строк вы думаете, что эта «база данных кеша» должна будет иметь? Кроме того, вам нужно хранить эти кешированные значения, разделенные сеансами? – Steve
Все значения кеша были бы уникальными, поэтому, если бы было кешировано значение для сеанса пользователя, у него был бы ключ кэш по линиям «UserId_SessionKey». –
Приложение будет поддерживать несколько подсайтов с содержимым, специфичным для пользователя, поэтому размер таблицы кэша может стать довольно большим в области от 100 до 500 тыс. Записей. Мы, вероятно, напишем некоторый тип автоматизированной процедуры для очистки истекшего кеша на основе созданной метки времени. –