Используйте Scalar::Util::looks_like_number()
, который использует внутренний Perl C looks_like_number API () функция, которая является, вероятно, самым эффективным способом сделать это. Обратите внимание, что строки "inf" и "бесконечность" рассматривают как числа.
#!/usr/bin/perl
use warnings;
use strict;
use Scalar::Util qw(looks_like_number);
my @exprs = qw(1 5.25 0.001 1.3e8 foo bar 1dd inf infinity);
foreach my $expr (@exprs) {
print "$expr is", looks_like_number($expr) ? '' : ' not', " a number\n";
}
Дает этот вывод:
1 is a number
5.25 is a number
0.001 is a number
1.3e8 is a number
foo is not a number
bar is not a number
1dd is not a number
inf is a number
infinity is a number
looks_like_number
4 ГБ - это база данных вполне приличного размера. Не используя до этого драгоценный камень, я могу только предполагать, насколько эффективно он хранит объекты, но поиграв с несколькими другими подобными базами данных объектов (Mongodb, db4o). Я знаю, что вы сможете уместить несколько (5-10) миллионов записей, прежде чем даже приблизитесь к этому пределу. На самом деле количество записей сильно зависит от типа данных, которые вы храните.
В качестве примера я хранил ~ 2 миллиона списков и ~ 1 миллион транзакций в базе данных mysql, и пространство было <1 ГБ. У вас есть небольшие накладные расходы на сериализацию всего объекта, но их не так много.
Файлы определенно можно хранить в файловой системе.
I'm aware of one GLASS system that is ~944 MB and has 8.3 million objects, or ~118 bytes per object. At this rate, it can grow to over 36 million objects and stay under 4 GB.
As to "attachments", I'd suggest that even in an RDBMS you should consider storing larger, static data in the file system and referencing it from the database. If you are building a web-based application, serving static content (JPG, CSS, etc.) should be done by your web server (e.g., Apache) rather than through the primary application.
By comparison, Oracle and Microsoft SQL Server have no-cost licenses for a 4-GB database.
What do you think would be a good price for the next level?
4gb an issue... I guess you think you're building the next ebay!
] Если у вас несколько одновременных пользователей с вложениями 5МБ, вам все равно нужна отдельная стратегия для них, так как каждый из них занимает около двадцатой секунды полосы пропускания сети GBit ethernet. [
]