Comment by idbehold
9 years ago
The problem we have is that we're trying to store JSON provided by the user. Meaning that we need to persist empty strings provided by them. The only way I can see around this issue is to replace all empty strings with a special string token on the way in, and replace all those special string tokens on the way out.
See that's the best use case I've seen in this entire discussion. If you don't get to control if blank vs null is significant then I can see how you'd have a real issue on your hand.
I'm guessing you have to have it in a form you can search it (so you can't just GZIP it or something like that)?
This is all correct.
Append all strings with a zero width space, and remove it on the way out.
Using a printable character (or sequence of characters) seems like it would be a lot better. It'll ugly up your database, but at least it'll be obvious that there's a difference. Having all your string possess two forms which are visually identical but are not actually the same sounds unpleasant.
I think it would be better to use something both printable and commonly used for placeholders, eg. an underscore, so it's obvious if you forget to remove it and unlikely to seriously confuse anybody.
What if the user has a string ending with a meaningful zero width space already stored? For example, the string could be checksummed somewhere. It would corrupt their data.
If you want a kludge for this, it's better to generate a longish random string (e.g., a UUID) to indicate an empty value.
When you get a string from the client you prepend a single zero width space. When you send a string back you strip the single leading space you added. The client will always have the exact same data back that they sent originally.
2 replies →
I believe the parent is saying
That way the user puts a string in and gets the same string out. No problem.
Is the zero width space destined to be the next maligned value, comparable to null?
It's too bad DynamoDB can't just do this conversion for me.
While not ideal, you can create a new AttributeTransform that sets a place holder when storing into DynamoDB and removes it when pulling out of DynamoDB as part of your DynamoDBMapper instantiation.
I did this to convert some String Sets (SS) in my database to String Lists (L). I almost did this same thing to fix the empty String issue but didn't have the time to implement it yet.
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/ama...
2 replies →