我要做出设计决定,正在寻找一些最佳实践建议。我有一个Java程序,需要在MySQL数据库中存储大量(每天数百个)浮点数组。数据是长度Double
为300
的固定长度数组。我可以看到三个合理的选择:
我还应该提到,该数据将被读取并经常更新。
我想使用BLOB,因为这是我过去所做的,并且这似乎是最有效的方法(例如,保持固定宽度且无需转换为逗号分隔的字符串)。但是,我的同事坚持认为,我们应该序列化和使用varchar,其原因似乎主要是教条主义的。
如果这些方法中的一种优于另一种,那么原因是Java还是MySQL特定?
像这样存储为BLOB(请参见下面的代码示例)。我认为这可能比使用Java序列化更好,因为Java的内置序列化将需要2427字节,并且非Java应用程序将很难处理数据。也就是说,将来是否应该有任何非Java应用程序查询数据库....否则,内置的序列化会少一些。
public static void storeInDB() throws IOException, SQLException {
double[] dubs = new double[300];
ByteArrayOutputStream bout = new ByteArrayOutputStream();
DataOutputStream dout = new DataOutputStream(bout);
for (double d : dubs) {
dout.writeDouble(d);
}
dout.close();
byte[] asBytes = bout.toByteArray();
PreparedStatement stmt = null; // however we normally get this...
stmt.setBytes(1, asBytes);
}
public static double[] readFromDB() throws IOException, SQLException {
ResultSet rs = null; // however we normally get this...
while (rs.next()) {
double[] dubs = new double[300];
byte[] asBytes = rs.getBytes("myDoubles");
ByteArrayInputStream bin = new ByteArrayInputStream(asBytes);
DataInputStream din = new DataInputStream(bin);
for (int i = 0; i < dubs.length; i++) {
dubs[i] = din.readDouble();
}
return dubs;
}
}
编辑:我希望使用BINARY(2400),但MySQL说:
mysql> create table t (a binary(2400)) ;
ERROR 1074 (42000): Column length too big for column 'a' (max = 255);
use BLOB or TEXT instead
问题内容: 我要做出设计决定,正在寻找一些最佳实践建议。我有一个Java程序,需要在MySQL数据库中存储大量(每天几百个)浮点数组。数据是长度为300 的固定长度数组。我可以看到三个合理的选择: 将数据存储为BLOB。 序列化数据并将其存储为VARCHAR。 将数据作为二进制文件写入磁盘,并存储对它的引用。 我还应该提到,该数据将被读取并经常更新。 我想使用BLOB,因为这是我过去所做的,并且这
问题内容: 我已经搜索了很多有关此问题的信息,但是我没有针对我的问题找到合适的解决方案,我有以下使用Java存储文件的方法, 当我尝试运行此代码时,出现以下错误, 请帮助我。 问题答案: 将文件数据转换为字节数组并在sql语句中设置
我认为问题是image的字节长度,因为当我得到字符串的长度()时,它大约是20万字节。 当我在字符串上做子字符串(3000)时,它很容易保存在BLOB列中。 那么问题到底在哪里?? 图像长度太长了吗? 或者我应该使用Oracle的任何其他数据类型? 我读到BLOB可以保存高达4GB的数据,那为什么不是我的??
如果我在Azure存储帐户上添加只允许从我的IP地址访问的防火墙规则,我仍然可以成功访问该存储帐户中的表和队列存储,但当我尝试访问任何Blob或文件存储时,会出现错误。 使用Microsoft Azure Storage Explorer时,我看到的错误是“无法检索子资源”。此请求未被授权执行此操作' 防火墙规则对blob和表存储的工作方式不同似乎很疯狂。有什么想法吗?
我正在处理一个Azure存储项目,其中我需要在容器中上传和下载blob,并在列表框中列出容器和blob。我无法在我的列表框中显示容器和blob。 最后是我调用上传、下载和列表方法的接口背后的代码:
问题内容: 我正在尝试显示上传到MySql中“存储”表的最后5张图像。我对PHP和数据库完全陌生,并且我一直在阅读有关如何做到这一点的很多文章,但是没有运气。 我可以一次存储和显示图片,但我希望能够拥有各种各样的画廊来显示最近上传的5张照片。 任何建议或帮助将不胜感激,谢谢! 附言:我知道将图片存储到这样的数据库时不赞成这样做,但是该项目仅用于实践。 index.php get.php 问题答案: